快速排序(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; }
相关文章推荐
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- 快速排序C语言源程序分析
- 快速排序和二分查找算法的实现C语言
- 归并排序,快速排序,堆排序,冒泡排序 c语言源代码
- 快速排序--C语言
- 快速排序----C语言数据结构
- 快速排序--C语言
- 快速排序 C语言实现
- 交换排序——冒泡排序和快速排序——C语言描述
- 几种基本的排序算法(选择排序,冒泡排序,快速排序,归并排序,希尔排序)C语言实现
- 快速排序的C语言实现及其时间复杂度
- C语言中用qsort()快速排序
- 快速排序的C语言代码实现
- 我的C语言快速排序方法
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- C语言(5) - 选择排序 快速排序
- 快速排序分析与C语言实现
- C语言调用库函数实现快速排序
- 快速排序_C语言实现
- 快速排序的C语言源代码与分析