qsort
- From
- Max Alekseyev (2:5015/60)
- To
- Anatoly Svishev
- Date
- 2002-10-07T11:47:32Z
- Area
- RU.ALGORITHMS
████ OS/2 Hi, Anatoly !
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)