快速排序算法

来源:互联网 发布:winscp连接linux被拒绝 编辑:程序博客网 时间:2024/05/29 17:51

快速排序算法

quickSort简介:

快速排序算法(有时也成为划分-交换排序)是一种高效的排序算法,在情况较好的情况下,快速排序大概是归并排序或者堆排序的效率的二到三倍。
快速排序的是Tony Hoare 于1959年发明的,直到今日快速排序仍然是我们经常使用的排序算法之一。在平均情况下快速排序的时间复杂度是O(nlogn)
在最坏的情况下是O(n平方)。

详细内容:

查看更详细的内容(历史,推导),请访问维基百度。看了不少博客的内容,感觉还是wiki上讲的好。这里推荐给大家:
https://en.wikipedia.org/wiki/Quicksort


C/C++实现:

<span style="font-size:14px;">#include<stdio.h>//函数声明int Partition(int a[],int s,int e);void quickSort(int a[],int s,int e);void Swap(int &a,int &b);/**快速排序函数*参数一:待排序的数组*参数二:数组的开始下标*参数三:数组的结束下标*/void quickSort(int a[],int s,int e){if(s<e){int div = Partition(a,s,e);quickSort(a,s,div-1);//对左侧部分进行递归quickSort(a,div+1,e);//对右侧部分进行递归}}/**分割函数*参数一:待分割的数组*参数二:数组的开始下标*参数三:数组的结束下标*/int Partition(int a[],int s,int e){int i = s,j = e+1;int x = a[s];//以第一个值为参考值来划分while(true){while(a[++i]<x&&i<e);while(a[--j]>x);if(i>=j)break;Swap(a[i],a[j]);//交换位置}a[s] = a[j];a[j] = x;return j;}/**交换元素位置函数*参数一:交换的第一个元素*参数二:交换的第二个元素*/void Swap(int &a,int &b){int temp = b;b = a;a = temp;}//主函数int main(){int a[] = {3,1,8,4,5,7,2,9};//测试数组:偶数情况quickSort(a,0,7);int i;for(i=0;i<8;i++)printf("%d ",a[i]);/******************************************************/printf("\n");int b[] = {3,9,1,5,7,6,2};//测试数组:奇数情况quickSort(b,0,6);for(i=0;i<7;i++)printf("%d ",b[i]);/******************************************************/printf("\n");int c[] = {4,3,2,7,8,7,9};//测试数组:含重复元素情况quickSort(c,0,6);for(i=0;i<7;i++)printf("%d ",c[i]);printf("\n");</span>return 0;}


1 0
原创粉丝点击