2016-12-24 13 views
-1

Поэтому у меня есть этот код для моего выбора вида:сортировка Выбора проблемы алгоритм

public static void selectionSort(int[] arrayToSort){ 
    int smallest; 
    for(int i = 0; i < arrayToSort.length; i++){ 
     smallest = i; 
     for(int j = i+1; j < arrayToSort.length; j++){ 
      if(arrayToSort[j] < arrayToSort[smallest]){ 
       smallest = j; 
      } 
      if(smallest != i){ 
       int temp = arrayToSort[i]; 
       arrayToSort[i] = arrayToSort[smallest]; 
       arrayToSort[smallest] = temp; 
      } 
     } 
    } 
} 

Я генерация Int массива случайных чисел. Мой сортировка иногда сортирует массив, иногда он «почти» сортирует массив. Массив будет сортироваться в основном за исключением нескольких цифр, которые находятся в неправильных местах. Я не могу понять, что здесь не так, какие-то идеи?

Некоторые результаты тестов, где массив не были полностью отсортированный:

***NON SORTED*** 
77 
53 
27 
58 
83 
***SORTED*** 
27 
53 
77 
58 
83 

и

***NON SORTED*** 
40 
87 
27 
48 
82 
***SORTED*** 
27 
40 
82 
48 
87 

ответ

3

У вас есть часть кода внутри внутреннего цикла, поставить его вне цикла;

public static void selectionSort(int[] arrayToSort){ 
    int smallest; 
    for(int i = 0; i < arrayToSort.length; i++){ 
     smallest = i; 
     for(int j = i+1; j < arrayToSort.length; j++){ 
      if(arrayToSort[j] < arrayToSort[smallest]){ 
       smallest = j; 
      } 
     } 
     if(smallest != i){ 
      int temp = arrayToSort[i]; 
      arrayToSort[i] = arrayToSort[smallest]; 
      arrayToSort[smallest] = temp; 
     } 
    } 
} 

См. Например, algorithm in Wikipedia.

+0

Ох, я вижу, как это затягивает его. Спасибо! – Carlton

2

Я сделал это, когда мне это нужно в проект колледжа!

ссылки: selection algoritm with figure

selection sort

public static void selectionSort(int[] arr){ 
     for (int i = 0; i < arr.length - 1; i++) 
     { 
      int index = i; 
      for (int j = i + 1; j < arr.length; j++){ 
       if (arr[j] < arr[index]){ 
        index = j;//searching for lowest index 
       } 
      } 
      int smallerNumber = arr[index]; 
      arr[index] = arr[i]; 
      arr[i] = smallerNumber; 
     } 
    } 
+0

спасибо за голосование .. для начинающего, его трудно получить репутацию. Я новый в переполнении стека. Большое вам спасибо! –

0

Здесь внутри 2-го цикла FOOR, если вы обнаружите какие-либо элементы, что меньше, чем я (или наименьшее) вы делаете операцию своп, который не требуется здесь. В выборе сортировки вам нужно получить наименьший элемент из несортированного массива и поменять его на самый левый элемент, и этот элемент станет частью отсортированного массива. Просто сохраните подкачку за пределами 2-го внутреннего контура Так, чтобы она выполняла операцию свопинга для самого маленького элемента.

for(int i = 0; i < arrayToSort.length; i++){ 
    smallest = i; 
    for(int j = i+1; j < arrayToSort.length; j++){ 
     if(arrayToSort[j] < arrayToSort[smallest]){ 
      smallest = j; 
     } 
    } 
    if(smallest != i){ 
     int temp = arrayToSort[i]; 
     arrayToSort[i] = arrayToSort[smallest]; 
     arrayToSort[smallest] = temp; 
    } 
} 
Смежные вопросы