Алгоритм быстрой сортировки - C (СИ)
Формулировка задачи:
не могу понять, где ставить <, >, или >=, <=
как точно понять??
А вообще это рабочий код, можете скомпилировать у себя
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
void InitR(int* p, int n, int number){
int i;
for(i=0;i<n;i++) p[i]=(rand()%number)+1;
}
void QSort(int* p,int l, int r){
int i=l,j=r;
int buf,m=(int)p[(l+r)/2];
do{
while(p[i]<m && i<r) i++; //почему именно p[i]<m, а не p[i]<=m
while(p[j]>m && j>l) j--;
if(i<=j){
buf=p[i];p[i]=p[j];p[j]=buf;i++;j--;
}
}while(i<=j); //тут тоже почему i<=j, а не i<j
if(j>l) QSort(p,l,j);
if(j<r) QSort(p,i,r);
}
void Show(int* p, int n){
int i;
for(i=0;i<n;i++) printf("p[%d] = %d \n",i,p[i]);
printf("\n\n\n");
}
void main(void){
int* p;
p=(int*)malloc(SIZE*sizeof(int));
if(p==NULL){
printf("Mo memory!");
exit(0);
}
InitR(p,SIZE,SIZE);
Show(p,SIZE);
QSort(p,0,SIZE-1);
Show(p,SIZE);
free(p); p=NULL;
system("pause");
}Решение задачи: «Алгоритм быстрой сортировки»
textual
Листинг программы
while(p[i]>m && i<r) i++; while(p[j]<m && j>l) j--;