qsort
- From
- Max Alekseyev (2:5015/60)
- To
- Anatoly Svishev
- Date
- 2002-10-08T20:12:28Z
- Area
- RU.ALGORITHMS
████ OS/2 Hi, Anatoly !
Replying to a message of Anatoly Svishev to Max Alekseyev:
MA>> Та версия была для массива из _различных_ чисел. Если есть одинаковые
MA>> - то вот модификация:
AS> ===cut===
AS> void qsort(int *a,int d) // quicksort array a[0],...,a[d-1]
AS> {
AS> if(d<=1) return;
AS> int med = a[0], i = 0, j = d-1;
AS> while(1) {
AS> while((i<j) && (a[j]>=med)) j--;
AS> while((i<j) && (a[i]<med)) i++;
AS> if(i>=j) break;
AS> int temp = a[i];
AS> a[i] = a[j];
AS> a[j] = temp;
AS> }
AS> j++;
AS> printf("%d: ",j);
AS> for(int i=0;i<d;i++) printf("%d ",a[i]);
AS> printf("\n");
AS> qsort(a,j); qsort(&a[j],d-j);
AS> }
MA>> ===cut===
MA>> ЗЫ. med = a[0] можно заменить, например, на med = a[rand()%d];
AS> небольшое замечание : &a[j] = a+j
a smysl? &a[j] naglyadnee.
AS> а теперь контрпример :
AS> int a[]={16,17,18,19,16,17,18,19};// - он просто пройдет весь массив
AS> справа налево и в цикл (вечный)
Net. Vse Ok. Zapusti i posmotri.
Regards, °°
Max ~
--- FleetStreet 1.27.3.8
* Origin: (2:5015/60)