快速排序算法步骤:
1、从数列中挑出一个元素,称为 “基准”(pivot),
2、重新排序数列,所有元素比基准值小的摆放在基准左区间,所有元素比基准值大的摆在基准的右区间。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分操作。
3、递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。
1、从数列中挑出一个元素,称为 “基准”(pivot),
2、重新排序数列,所有元素比基准值小的摆放在基准左区间,所有元素比基准值大的摆在基准的右区间。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分操作。
3、递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。
#include <iostream>
using namespace std;
void quicksort(int a[], int low, int high)
{
int i,j,pivot;
if(low < high)
{
pivot = a[low];
i = low;
j = high;
{
int i,j,pivot;
if(low < high)
{
pivot = a[low];
i = low;
j = high;
while(i < j)
{
while(i < j && a[j] >= pivot)
j--;
if(i < j)
a[i++] = a[j]; //这里把比pivot小的元素放到低端
{
while(i < j && a[j] >= pivot)
j--;
if(i < j)
a[i++] = a[j]; //这里把比pivot小的元素放到低端
while(i < j && a[i] <= pivot)
i++;
if(i < j)
a[j--] = a[i]; //这里把比pivot大的元素放到高端
}
i++;
if(i < j)
a[j--] = a[i]; //这里把比pivot大的元素放到高端
}
a[i] = pivot; //pivot放到最终位置
quicksort(a, low, i - 1); //向左区间递归排序
quicksort(a, i + 1, high); //向右区间递归排序
quicksort(a, i + 1, high); //向右区间递归排序
}
}
}
int main()
{
int a[9] = {1,5,3,8,7,6,2,9,4};
quicksort(a,0,8);
for(int i = 0; i < 9; i++)
{
cout << a[i] << " ";
}
cout << endl;
{
int a[9] = {1,5,3,8,7,6,2,9,4};
quicksort(a,0,8);
for(int i = 0; i < 9; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}
}