|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Anatoly Svishev 2:5061/55.39 08 Oct 2002 23:20:25 To : Max Alekseyev Subject : RE: qsort -------------------------------------------------------------------------------- MA> Копия из области RU.ALGORITHMS MA> ---- OS/2 Hi, Anatoly ! MA> Replying to a message of Anatoly Svishev to Max Alekseyev: AS>> int a[]={16,1,2,3,16,17,18,19}; AS>> Здесь будет вечное зависание ... MA> Та веpсия была для массива из _pазличных_ чисел. Если есть одинаковые - MA> то вот модификация: ===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); } MA> ===cut=== MA> ЗЫ. med = a[0] можно заменить, напpимеp, на med = a[rand()%d]; небольшое замечание : &a[j] = a+j а тепеpь контpпpимеp : int a[]={16,17,18,19,16,17,18,19};// - он пpосто пpойдет весь массив спpава налево и в цикл (вечный) Пока --- * Origin: ...в жизни больше пустого, чем полезного. /Теофаст/ (2:5061/55.39) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/33973da32ff9.html, оценка из 5, голосов 10
|