您的位置:首页 > 编程语言 > C语言/C++

快速排序(C语言)

2016-10-16 12:50 197 查看
//快速排序
//基本思想是:1.分解(分为比基准元素小的 基准元素 比基准元素大的 三部分)
//2.递归求解
//3.合并
#include<stdio.h>
#include<time.h>
#define N 1000
#define max 100
int a
;
void swap(int i, int j){
int x = a[i];
a[i] = a[j];
a[j] = x;
}
int patition(int p, int q){
int x = a[p];
int i = p,j=q+1;
while(1){
//从a[p]开始寻找,如果比基准元素小则继续寻找下一个直到右边部分全部查找完毕(i>j)
//如果比基准元素大,则停止寻找
while(a[++i] < x && i < j);
//同样,从第二段的最后开始开始寻找,如果比基准元素大则继续寻找,
//如果比基准元素小,则停止寻找
while(a[--j] > x);
//如果两边元素都比较完了(i > j)则推出循环Break;
//否则就要将右边比基准元素小的数和左边比基准元素大的数交换位置
if(i >= j)
break;
else
swap(i,j);
}
//将基准元素放到两端数的中间那个位置
a[p] = a[j];
a[j] = x;
//返回基准元素的数组下标
return j;
}
void mergeSort(int p,int q){
if(p < q){
//得到基准元素的数组下标
int x = patition(p,q);
//以基准元素为基准不断递归求解
mergeSort(p,x-1);
mergeSort(x+1,q);
}
}
int main(){
int i;
srand((unsigned int)time(NULL));
for(i = 0; i < N;i++){
a[i] = rand()%max+1;
printf("%d ",a[i]);
}
mergeSort(0,N-1);
printf("\n排序后的数组为:\n");
for(i = 0; i < N; i++){
printf("%d ",a[i]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: