2011-12-01 2 views
0

나는 작동하는 quicksort를 가지고 있으며, 또한 작동하는 선택 정렬 - 나는 array.length = 1까지 quicksort로 무작위 int의 int[]을 정렬하고 그 마지막 요소 호출 선택 정렬을 원합니다. 나는 array.length을 검사하는 조건을 알아야하고, length = 1을 반환하면 을 반환합니다. quickSort() 내의 재귀 호출에서 구조화하는 방법을 모르겠습니다. 여기 내 두 개의 정렬 방법은 다음과 같습니다이 퀵 정렬을 구성하여 특정 인덱스 값에서 퀵 정렬을 중지하고 선택 정렬을 시작하려면 어떻게해야합니까?

이것은 QuickSort :

public void quickSort(int array[], int start, int end) { 
    int i = start; // index val of left-to-right scan 
    int k = end; // index val of right-to-left scan 

    if (end - start >= 1){ 
     PIVOT = array[start]; 
     while (k > i){ 
      while (array[i] <= PIVOT && i <= end && k > i) 
       i++; 
      while (array[k] > PIVOT && k >= start && k >= i) 
       k--; 
      if (k > i) 
       swap(array, i, k); 
     } 
     swap(array, start, k); 
     quickSort(array, start, k - 1); 
     System.out.println(k); 
     quickSort(array, k + 1, end); 

    } 
    return; 
} 

선택 정렬 : 이미 거의 그 일을하고

public void selectionSort(int[] nums) { 
    //nums[0] = array[0]; 
    System.out.println(nums.length); 
    for (int i = 0; i < (nums.length - 1); i++) { 
     for (int j = i + 1; j < nums.length; j++) { 
      if (nums[i] > nums[j]) { 
       int temp = nums[i]; 
       nums[i] = nums[j]; 
       nums[j] = temp; 
      } 
     } 
    } 
} 

답변

1

. 이 줄로 end - start 길이를 얻고 있습니다. 길이가 SelectionSortThreshold보다 작 으면 현재 길이가 인 삽입 유형 만 실행하십시오. 즉 루틴을 수정하여 startend 매개 변수를 받아들이도록 선택하면 배열의 작은 부분 만 선택할 수 있습니다.

+0

어디에서 임계 값을 언급합니까? 아니면 암시입니까? 내가보기 엔 배열 길이가 1 일 때입니다. 왜 분명히 잘못된 것입니까? 왜 단일 항목 배열을 정렬하고 정렬할까요? – Steven

+0

@steven - quicksort의 재귀 호출에 너무 많은 오버 헤드가 있기 때문에 잘못은 아니지만 의견을 주셔서 감사합니다. – mcgraw

+1

@ mcG73 스티븐 (Steven)의 지적에 따르면 하나의 요소로 된 배열을 정렬하는 것은 이미 정렬되어 있기 때문에 유용하지 않습니다. 임계 값은 1보다 큰 숫자 여야합니다. –

관련 문제