//分治法-快速排序
#include
void disp(int a[],int n){
for(int i=0;i
printf("%d ",a[i]);
}
printf("\n");
}//遍历输出数组
int partition(int a[],int s,int t){
int i=s,j=t,temp=a[s]; //其中s是初始每一趟划分的数组里的第一个元素的下标,t为最后一个元素的下标 ,temp以第一个元素作为每一趟的那一个比较对象
while(i!=j)
{
while(j>i&&a[j]>=temp){
j--;
} //满足j>i,当a[j]>temp时自动略过,继续j--,直到a[j]
while(i
i++;
} //满足i
a[j]=a[i];
} //当i=j时则比较结束,与此同时此时的i或者j就是 temp目前的位置
a[i]=temp;//出循环则i/j就是temp的下标
return i;//return出的是每一轮temp的下标=下一趟的分界点
}//每一趟进行的a[i]与a[j]之间的数值交换(划分算法)
void QuickSort(int a[],int s,int t){
if(s
int i=partition(a,s,t);//运用partition函数找到分界点
QuickSort(a,s,i-1);
QuickSort(a,i+1,t);
}
} //快速排序算法
int main(){
int n=10;
int a[]={12,52,9,30,11,6,16,44,22,10};
printf("数组排序前:");
disp(a,n);
QuickSort(a,0,n-1);
printf("数组排序后:");
disp(a,n);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)