快速排序 —— 左右指针法的原理:

(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;
}

运行结果:

C++ 快速排序 —— 左右指针法

相关文章:

  • 2021-10-26
  • 2022-01-24
  • 2021-07-14
  • 2021-05-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-23
  • 2021-08-16
  • 2021-10-28
  • 2022-12-23
  • 2021-09-13
  • 2021-12-29
  • 2021-11-17
相关资源
相似解决方案