快速排序
2014-04-17 10:14
197 查看
快速排序(类似于归并算法)是一种分而治之算法。首先它将列表分为两个更小的子列表:一个大一个小。然后递归排序这些子列表。下面就用分而治之的方法来排序子数组A[p...r];
步骤:
Divide:从列表中取一个元素作为支点,将数组分为A[p‥q
- 1] andA[q + 1‥r] ,A[p ‥ q -
1]中每一个元素都小于A[q] , 而A[q + 1 ‥ r]中每个元素都大于A[q].计算出支点实际存在数组中的位置,即q的值就是PARTITION操作。
Conquer:通过递归的方法对两个数组进行排序
Combine:因为子数组是原地处理的(即in-place),所以不需要合并他们,A[p....r]已经是排好序的。
平均时间复杂度是O(nlgn);
#include <stdio.h>
void quickSort(int *pstart, int *pend)
{
if(pend > pstart)
{
int *phead = pstart;
int *ptail = pend;
int num = *pstart; // 作为基准数字
while(ptail > phead)
{
if(*phead > *ptail)
{
int temp = *phead;
*phead = *ptail;
*ptail = temp;
}
if(*phead != num)
{
++phead;
}
else
{
--ptail;
}
}
quickSort(pstart, phead-1);
quickSort(phead+1, pend);
}
}
int main()
{
int arr[] = {-3,-5,0,-2,5,1,6,-2,8,7,-9,20};
int i = 0;
quickSort(arr, arr+12);
for(i = 0; i < 12; ++i)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
步骤:
Divide:从列表中取一个元素作为支点,将数组分为A[p‥q
- 1] andA[q + 1‥r] ,A[p ‥ q -
1]中每一个元素都小于A[q] , 而A[q + 1 ‥ r]中每个元素都大于A[q].计算出支点实际存在数组中的位置,即q的值就是PARTITION操作。
Conquer:通过递归的方法对两个数组进行排序
Combine:因为子数组是原地处理的(即in-place),所以不需要合并他们,A[p....r]已经是排好序的。
平均时间复杂度是O(nlgn);
#include <stdio.h>
void quickSort(int *pstart, int *pend)
{
if(pend > pstart)
{
int *phead = pstart;
int *ptail = pend;
int num = *pstart; // 作为基准数字
while(ptail > phead)
{
if(*phead > *ptail)
{
int temp = *phead;
*phead = *ptail;
*ptail = temp;
}
if(*phead != num)
{
++phead;
}
else
{
--ptail;
}
}
quickSort(pstart, phead-1);
quickSort(phead+1, pend);
}
}
int main()
{
int arr[] = {-3,-5,0,-2,5,1,6,-2,8,7,-9,20};
int i = 0;
quickSort(arr, arr+12);
for(i = 0; i < 12; ++i)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
相关文章推荐
- 快速排序时间复杂度为O(n×log(n))的证明
- STL快速排序
- 二分法查找、快速排序思想与实现
- 快速排序——QuickSort——Python
- ACM算法——快速排序
- NSGA 2 学习笔记 -- 快速排序
- 算法笔记--快速排序
- 快速排序的实现(c语言)
- 菜鸟学排序:快速排序
- C实现快速排序
- 算法导论-4.随机快速排序与线性时间排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 快速排序解析
- vector [1]介绍了两个应用,快速排序,SPFA
- 快速排序
- 温习快速排序
- [java]排序分类--及选择排序、插入排序、冒泡排序、快速排序的解释图和代码
- 快速排序分析与C语言实现
- 排序算法之快速排序Java版
- 快速排序