2013-08-04 1 views
0

Я пытаюсь осуществить быструю сортировку с использованием случайного стержняРандомизированной быстрая сортировки в С доходностью несобственными/частично отсортировано

void QuickSort(int *arr,int left,int right){ 

if(right-left+1 > 2){ 

    int i = 0,storeIndex = left; 
    int pivot = left + (int)(rand() % (right-left+1)); 

    swap(&arr[pivot],&arr[right]); 

    for(i = left; i < right; i++){ 

     if(arr[i] < arr[right]){ 
      swap(&arr[i],&arr[storeIndex]); 
      storeIndex++; 
     } 
    } 

    swap(&arr[storeIndex],&arr[right]); 
    QuickSort(arr,left,storeIndex-1); 
    QuickSort(arr,storeIndex+1,right); 
    } 
} 

но это дает выходной сигнал, который неправильно отсортированному как

несортированное: [81, 87,47,59,81,18,25,40,56,0]

отсортирован: [0,18,25,40,56,47,59,81,87,81]

это что-то не так с моим алгоритмом, потому что что-то подобное в Python работал отлично

ответ

3

условие, очевидно, неверно: если вы передаете массив 2 элемента не будет отсортирован, потому что:

left = 0 
right = 1 
right - left + 1 = 2 not greater than 2 
+0

right-left + 1> 1 works Я был своего рода смешением версии python, где мы проверяем, len (arr) <2 спасибо – user2007060

0

Я думаю, ваш цикл for должен быть циклом while.

Смежные вопросы