一.定义:
快速排序,这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。
二.算法描述:
快速排序采用的思想是分治思想。
快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大
于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。
递归快速排序,将其他n-1个元素也调整到排序后的正确位置。
最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序
算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。
三.代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void quick_sort(int a[], int left, int right)
{
int i, j, pivot, temp;
if(left >= right)
return;
i = left;
j = right;
pivot = a[left];
while(i < j) {
while(a[j] >= pivot && i < j) {
j--;
}
while(a[i] <= pivot && i < j) {
i++;
}
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
a[left] = a[i];
a[i] = pivot;
quick_sort(a, left, i - 1);
quick_sort(a, i + 1, right);
}
void Quick_Sort(int a[], int n)
{
quick_sort(a, 0, n - 1);
}
int main()
{
int i;
int a[] = {5, 4, 3, 9, 8, 7, 6, 2, 1, 0};
for(i = 0; i < 10; i++)
printf("%d ", a[i]);
printf("\n");
Quick_Sort(a, 10);
for(i = 0; i < 10; i++)
printf("%d ", a[i]);
printf("\n");
system("pause");
return 0;
}
四.相关题目:
1.剑指offer面试题29:数组中出现次数超过一半的数字;
2.剑指offer面试题30:最小的k个数;