版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AnselLyy/article/details/52957833
快速排序(quicksort)
快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想——分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
学习代码:
#include <iostream>
#include <algorithm>
using namespace std;
int a[100005];
void quicksort(int *a, int left, int right)
{
if (left < right)
{
int i = left;
int j = right;
int x = a[left];
while (i < j)
{
while (i < j && a[j] >= x) j--; //从右向左找第一个小于x的数
if (i < j) a[i++] = a[j];
while (i < j && a[i] < x) i++; //从左向右找第一个大于等于x的数
if (i < j) a[j--] = a[i];
}
a[i] = x;
quicksort(a, left, i-1); //递归调用
quicksort(a, i+1, right);
}
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
quicksort(a, 0, n-1);
for (int i = 0; i < n; i++) cout << a[i] << " ";
return 0;
}