|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Max Alekseyev 2:5015/60 07 Oct 2002 11:47:32 To : Anatoly Svishev Subject : qsort -------------------------------------------------------------------------------- Replying to a message of Anatoly Svishev to Max Alekseyev: AS> int a[]={16,1,2,3,16,17,18,19}; AS> Здесь будет вечное зависание ... Та версия была для массива из _различных_ чисел. Если есть одинаковые - то вот модификация: ===cut=== void qsort(int *a,int d) // quicksort array a[0],...,a[d-1] { if(d<=1) return; int med = a[0], i = 0, j = d-1; while(1) { while((i<j) && (a[j]>=med)) j--; while((i<j) && (a[i]<med)) i++; if(i>=j) break; int temp = a[i]; a[i] = a[j]; a[j] = temp; } j++; printf("%d: ",j); for(int i=0;i<d;i++) printf("%d ",a[i]); printf("\n"); qsort(a,j); qsort(&a[j],d-j); } ===cut=== ЗЫ. med = a[0] можно заменить, например, на med = a[rand()%d]; Regards, ш.ш Max ~ --- FleetStreet 1.27.3.8 * Origin: (2:5015/60) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/18133da174e5.html, оценка из 5, голосов 10
|