c语言实现快速排序
来源:互联网 发布:mac怎么卸载第三方软件 编辑:程序博客网 时间:2024/06/07 18:09
快速排序
时间复杂度:最好时间O(nlogn) 最坏时间O(n^2)
稳定性:不稳定 快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
实现方法:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,
所有比它大的数都放到它后面,这个过程称为一趟快速排序。
//代码实现: #include <stdio.h> #include <stdlib.h> //实现交换 void Swap(int a[] ,int low ,int high) { int tmp; tmp=a[low]; a[low]=a[high]; a[high]=tmp; } /************************************************************************** 函数名:partition() 功能: 计算基准点的函数,并将小于基准点的元素放于基准点的左边,大于基准点的数放于基准点右边 输入参数: int a[]:待排序的数组 int low:数组的起始位置 int high:数组的结束位置 返回值:int 基准点 *************************************************************************** */ int partition(int a[],int low,int high) { int point; //基准点定位为第一个元素 point=a[low]; while( low < high) { //将大于基准点的数放于基准点的右边 while( low < high && a[high] >= point ) high--; //移到前一个元素 //当不满足大于基准点,交换基准点 Swap(a,low,high); //将小于基准点的数放于基准点的左边 while( low < high && a[low] <= point) low++; //移到下一个元素 //当不满足小于基准点,交换基准点 Swap(a,low,high); } return low;//返回的中间点,当退出循环后low 与high指向同一个元素 } //low 为数组起始位置 high为数组的结束位置void QSort(int a[],int low,int high) { int point;//定义变量存放基准点 if( low < high ) { point=partition(a,low,high);//对基准点定位 //对基准点左边进行递归调用 QSort(a,low,point-1); //对基准点右边进行递归调用 QSort(a,point+1,high); } } //外层函数,由于快速排序需要三个参数,为零满足只要两个参数,定义一个外层函数调用实际操作的函数 void QuickSort(int a[],int len) { //调用实际操作的函数 QSort(int a[],0,len-1); } int main(int argc, char const *argv[]) { int array[]={123,456,12,3,456}; QuickSort(array,5); int i; for(i=0;i<5;i++) { printf("%d ",array[i]); } return 0; }
0 0
- 快速排序 C语言实现
- 快速排序C语言实现
- c语言实现快速排序
- C语言实现快速排序
- 快速排序实现(C语言)
- 快速排序C语言实现
- C语言实现快速排序
- 快速排序C语言实现
- 快速排序C语言实现
- C语言实现快速排序
- C语言实现快速排序
- 快速排序c语言实现
- 快速排序c语言实现
- C语言实现快速排序
- 快速排序(C语言实现)
- 快速排序C语言实现
- C语言实现快速排序
- c语言实现快速排序
- 时钟分频引起的问题
- iOS 【Mutithreading-NSCache】
- 关于php的phar
- andoird Xml解析XmlPullParser 的使用
- SparseArray浅析
- c语言实现快速排序
- 使用activity中遇到的问题及解决办法
- 在一个分时操作系统中,进程出现由运行状态进入就绪状态,由阻塞状态进入就绪状态的原因分别可能是()
- 序列化一组对象
- The method xxx of type xxx must override a superclass method
- CentOS 64位编译Hadoop2.6源码
- php+中文分词scws+sphinx+mysql打造千万级数据全文搜索
- poj 2377最大生成树 Kruskal
- Thread Signaling