快速排序 —— 左右指针法的原理:
(1)设最右值为枢轴值
(2)从左往右扫描,发现大于枢轴值的就进行位置互换
(3)从右往左扫描,发现小于枢轴值的就进行位置互换
#include <iostream>
#include <stdlib.h>
using namespace std;
/*******************************************/
/* 快速排序 —— 左右指针法
/******************************************/
void swap(int &a, int &b) //位置互换函数
{
int temp = a;
a = b;
b = temp;
}
int Quick(int array[], int left, int right) //快速排序算法
{
int key = right; //枢轴key,最右值
while (left < right)
{
while (left < right && array[left] <= array[key]) //从左扫描到右,发现>key就结束本次循环
{
++left; //最左值
}
while (left < right && array[right] >= array[key]) //从右扫描到左,发现<key就结束本次循环
{
--right;
}
swap(array[left], array[right]); //当前左>key值和右<key值进行交换
}
swap(array[left], array[key]); //最后一次从左扫描到右,把>key值和key值进行交换
return left;
}
void QuickSort(int array[], int left, int right) //快速排序函数
{
if (left < right)
{
int key = Quick(array, left, right);
QuickSort(array, left, key - 1);
QuickSort(array, key + 1, right);
}
}
int main(void) //主程序
{
const int n = 6; //数组元素的数量
int array[n];
cout << "请输入6个整数:" << endl;
for (int i = 0; i < n; i++)
{
cin >> array[i];
}
cout << endl; //换行
QuickSort(array, 0, n-1); // 调用QuickSort函数进行比较
cout << "由小到大的顺序排列后:" << endl;
for (int i = 0; i < n; i++)
{
cout << "Array" << "[" << i << "]" << " = " << array[i] << endl;
}
cout << endl << endl; //换行
system("pause"); //调试时,黑窗口不会闪退,一直保持
return 0;
}