C语言实现的快速排序,采用分治策略,递归实现
2014-03-17 09:27
645 查看
#include<stdio.h> #define LEN 8 int a[LEN] = { 5, 2, 4, 7, 1, 3, 2, 6 }; int Partition(int a[],int p,int r); void Swap(int *a,int *b); void QuickSort(int a[],int p,int r) { if(p<r) { int q=Partition(a,p,r);//q是当前划分点 printf("当前Q的值是:%d\n",a[q]); for(int i=0;i<LEN;i++) { printf("%d,",a[i]); } printf("\n"); QuickSort(a,p,q-1); QuickSort(a,q+1,r); } } int Partition(int a[],int p,int r) { printf("当前P的值是:%d\n",a[p]); int i=p,j=r+1;//i指向了数组的第一个数,j指向了数组的最后一个数 int x=a[p];//x现在的值是数组a的第一个值,x是基准元素 while(1) { while(a[++i]<x&&i<r);//一直往下找,找到比x小的数,继续程序,要注意i不能越界 while(a[--j]>x);//继续往前找,找到比x大的数,继续程序 if(i>=j)break;// Swap(&a[i],&a[j]);// } a[p]=a[j]; a[j]=x; return j; } void Swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } int main() { printf("待排数组为:\n"); for(int i=0;i<LEN;i++) { printf("%d,",a[i]); } printf("\n"); QuickSort(a,0,LEN-1); }
相关文章推荐
- C++中extern “C”含义深层探索
- C++ 中的Virtual Function (虚函数)
- C++11下的线程池以及灵活的functional + bind + lamda
- java和C++中的static
- 2013级C++第4周(春)项目——再和对象找感觉【项目3 - 程序的多文件组织】
- C++编写DLL的方法
- c++学习书籍推荐
- iphone开发OC语言的NSString与int和float的相互转换
- C++的异常处理
- C++ 虚函数表解析
- 2012年蓝桥杯预赛题-取球游戏
- 浅析C++ cout语句执行过程
- 2012蓝桥杯预赛题-夺冠概率
- C++拷贝构造(转)
- C语言排序(冒泡,选择,插入,归并,快速)
- C++中内存分配
- 使用c++模板的优点和缺点
- C++ Boost库简介
- c++11之右值引用
- [C++] socket - 2 [UDP通信C/S实例]