2016-04-18 5 views
0

Выбор Сортировка:Выбор алгоритма сортировки

sorting algorithm

Я создал выбор алгоритм сортировки, но кто-то сказал мне его не правильный выбор сортировки.

Если это не так, то какой тип сортировки? и как это отличается от сортировки сортировки.

Код:

void selection_Sort(int arr[] , int size){ 
    int temp , length = size; 
    for(int i = 0; i < size ; i++){ 
     for(int j = i + 1; j < size ; j++){ 
      if(arr[i] > arr[j]){ 
       temp = arr[j]; 
       arr[j] = arr[i]; 
       arr[i] = temp; 
      } 
     } 
    } 
} 

скажите, пожалуйста, как я могу это исправить?

+0

Selection объясняется достаточно хорошо на https://en.wikipedia.org/wiki/Selection_sort#Implementation. Код фрагмента на странице. – Spade

ответ

1

Чтобы преобразовать этот код в selection sort, вы должны найти индекс минимального элемента во внутреннем цикле и обменивать элемент по этому индексу с i-м элементом после завершения внутреннего цикла.

Так общее число свопов не превышает N (в то время как ваш текущий код может производить около N^2/2 свопов)

+0

, так что я могу сказать, что это не очень хороший алгоритм – Xitas

+0

Вы рассказываете о выборе сортировки или о вашей реализации? – MBo

+0

моя реализация – Xitas

0

Вы реализовали Bubble сортировки.

Сортировка выбора означает, что вы должны найти самый нижний (или самый большой) элемент во внутреннем цикле, а затем переключить его с помощью элемента влево/вправо, который находится на краю выбора (например, на рисунке).

Есть три аналогичных alghoritms сортировки - выбрать сортировку вставки сортировки и пузырьковой сортировки вы можете наблюдать, как они ведут себя здесь: http://i.imgur.com/fq0A8hx.gif

+0

в сортировке пузыря мы сравниваем arr [j]> arr [j + 1] сразу два элемента – Xitas

+0

да, я думаю, что вы правы – Xitas

0
 var Selectionsort = function (A) { 
      for (var i = 0; i < A.length; i++) { 
       var imin = i; 
        for (var j = i + 1; j <= A.length; j++) { 
         if (A[j] < A[imin]) 
          imin = j; 
        } 
        var tmp = A[i]; 
        A[i] = A[imin]; 
        A[imin] = tmp; 
      } 
      return A; 
     }; 
     var A = [10, 20, 30, 40, 50, 60, 70, 80]; 
     var Aftersorted = Selectionsort(A); 
     console.log(Aftersorted); 
0

Вы можете улучшить это так: то

void selectionSort(double array[], int size) { 
    int min; 
    double temp; 
    for (int step = 0; step < size-1; step++) { 
     min = step; 
     for (int i = step+1; i < size; i++) { 
      if (array [i] < array[min]) { 
       min = i; 
      } 
     } 
     temp = array[step]; 
     array [step] = array[min]; 
     array [min] = temp; 
    } 
Смежные вопросы