当前位置:   article > 正文

快速排序—C++实现_快速排序c++实现

快速排序c++实现

快速排序—C++实现

快速排序虽然看着不难、理解起来也很简单,但是值得注意的点还是有很多,一不小心就踩坑!首先:快排的思想是:选定一个基准为,采用双指针的方法,左指针找比基准位小的数,右指针找比基准位大的数,进行交换,最后的结果就是,基准位左边的都是比它小的数,基准位右边都是比它大的数,再分别对这两个区间进行递归排序

  1. 双指针的顺序要注意
  2. 退出递归的条件不能少
  3. 循环嵌套循环

具体实现:

#include<iostream>
using namespace std;
void QuickSort(int arr[], int left, int right)
{
	if (left >= right) return;//这是退出递归的条件,一定要写
	int i = left;
	int j = right;
	int base = arr[left];//选取第一个元素做基准
	while (i < j)
	{
		while (j > i && arr[j] >= base)//右指针一定要先写
			j--;
		while (i < j && arr[i] <= base)//左指针后写
			i++;
		if (i < j)
		{
			int temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
	}
	arr[left] = arr[i];
	arr[i] = base;//基准位更换
	QuickSort(arr, left, i - 1);//比基准位小的都排在左边,在左区间进行递归
	QuickSort(arr, i + 1, right);//比基准位大的都排在右边,在右区间进行递归
}
int main()
{
	int arr[] = { 1,9,8,7,2,4,5,6,3,10 };
	int len = sizeof(arr) / sizeof(arr[0]);
	QuickSort(arr, 0, len - 1);
	for (int i = 0; i < len; i++)//遍历输出
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

输出如下:

在这里插入图片描述

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号