0
点赞
收藏
分享

微信扫一扫

(算法)快速排序 quick_sort

IT程序员 2022-04-27 阅读 83
排序算法

思想:

选择一个参考值(这个参考值是可以任意的,一般选择左边界数或者右边界数或者中间数来做参考数),在数据的头和尾设置两个指针,每次比较这两个指针所指的数与参考值的大小,具体方法我们通过例子来理解:

拿一组数据为例: 我们设立左边界数4为参考值

一开始我们设立两个指针,分别指向左边的4以及右边的1

之后我们对左边的指针所指的数与参考值进行比较

左指针移动的条件是:(左指针所指的数)<=参考数

4=4,左边指针向又移动一位

之后我们继续进行比较,2<4,左边指针继续向右移动一位

当左指针指向6时,6>4不符合条件,所以我们对右指针进行操作

右指针需要的条件是 (右指针所指的数)>=参考数

1<参考数4

当两个指针都停止移动时,我们交换两个指针所指的数

这样子我们就能保证左指针左边的数(包括左指针所指的数)都是小于等于参考数的,右指针右边的数(包括右指针所指的数)都是大于等于参考数的。

之后,我们在对左指针左边的数再使用上述方法一次

右指针右边的数再使用上述方法一次(递归),既可达到快速排序的目的。

编译器:VS2022  代码实现:

 

#include<iostream>
using namespace std;
const int N= 1e6 + 10;
int n;
int q[N];
void quick_sort(int q[], int l, int r)
{
	if (l >= r) return;//判断数据是否只有一个
	int x = q[l]; int i = l - 1; int j = r + 1;//设立参考值x,左指针i 右指针j 
	while (i < j)
	{
		do i++; while (q[i] < x);
		do j--; while (q[j] > x);
		if (i <= j) swap(q[i], q[j]);

	}
	quick_sort(q, l, j);//对左指针左边的数进行排序
	quick_sort(q, j + 1, r);//对右指针右边的数进行排序

}
int main()
{
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++) scanf_s("%d", &q[i]);
	quick_sort(q, 0, n - 1);
	for (int i = 0; i < n; i++) printf("%d ", q[i]);
	return 0;
}

 

 

举报

相关推荐

0 条评论