打印

【转】交换排序之快速排序

[复制链接]
483|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一代掌门|  楼主 | 2016-12-22 12:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
快速排序:

快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。

它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可 递归进行,以此达到整个数据变成有序序列。

时间复杂度:O(n*logn)
最坏:O(n^2)
空间复杂度:O(n*logn)
稳定性:不稳定

交换:

[cpp] view plain copy
print?


  • void swap(int *a,int *b)  
  • {  
  •     int temp=*a;  
  •     *a=*b;  
  •     *b=temp;  
  • }  
  • int Partitiion(int arr[],int low,int high)  
  • {  
  •     //int pointKey=arr[low];  
  •     while(low<high)  
  •     {  
  •         while(low<high&&arr[low]<=arr[high]) high--;  
  •         swap(&arr[low],&arr[high]);  
  •         while(low<high&&arr[high]>=arr[low]) low++;  
  •         swap(&arr[low],&arr[high]);  
  •     }  
  •     return low;  
  • }  


分治:

[cpp] view plain copy
print?


  • void qSort(int arr[],int low,int high)  
  • {  
  •     int point;  
  •     if(low>=high)  
  •         return ;  
  •     point=Partition(arr,low,high);  
  •     qSort(arr,low,point-1);  
  •     qSort(arr,point+1,high);  
  • }  


举个栗子:

[cpp] view plain copy
print?


  • void print(int seq[],int len)  
  • {  
  •     int *p=seq;  
  •     while(p!=&seq[len])  
  •     {  
  •         printf("%d ",*p);  
  •         p++;  
  •     }  
  •     printf("\n");  
  • }  
  • int main()  
  • {  
  •     int Seq[]={11,5,2,3,6,4,8,9,15,12};  
  •     printf("排序前:");  
  •     print(Seq,10);  
  •     printf("排序后:");  
  •     qSort(Seq,0,9);  
  •     print(Seq,10);  
  •     return 0;  
  • }  


相关帖子

沙发
baimiaocun2015| | 2016-12-22 23:01 | 只看该作者
排序的话最常见的是 冒泡排序。

使用特权

评论回复
板凳
baimiaocun2015| | 2016-12-22 23:02 | 只看该作者
采用分割的办法可以快速的进行数据的排序定位的,提高了效率

使用特权

评论回复
地板
zhangbo1985| | 2016-12-25 19:34 | 只看该作者
这个是采用二分法的进行处理数据的,效率成倍提高的。

使用特权

评论回复
5
i1mcu| | 2016-12-25 20:45 | 只看该作者
还是用的冒泡算法比较多。

使用特权

评论回复
6
i1mcu| | 2016-12-25 20:47 | 只看该作者
楼主的交换算法有更加简介的吗?

使用特权

评论回复
7
angerbird| | 2016-12-28 22:13 | 只看该作者
这个就是采用二分法的实现的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

191

帖子

4

粉丝