栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode刷题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode刷题

常用排序算法 快速排序(Quicksort)
  1. 快速排序的思想是:先找一个基准,比如下面的例子中找的基准就是第一个数,然后传入一个数组需要排序部分的头指针和尾指针,实际用的传入下标索引就行。
    然后把这个数组中所有比基准大的放在基准后面,所有比基准小的放在基准前面,这样基准肯定是被放到了该数组中正确的位置,然后开始递归,接着排前面的部分和后面的部分。
  2. 具体代码中怎么操作,怎么将小的移动到前面,大的移动到后面呢?
    • 还需要定义两个指针,叫下标也行,然后头尾一起遍历,一个last指针,一个first指针。找到nums[last]
    • 然后找到nums[first]>key的就把现在的值赋给nums[last],找不到就first++.
    • 找到first = last了就说明前后都找完了。然后此时把nums[first] = key,也即是把基准放到最正确的位置。
    • 开始递归,传入[l,first]找前面的,和传入[first+1,r]找后面的。
    • 具体参照以下代码。
#include
#include
using namespace std;
void quick_sort(vector& nums, int l, int r);

int main()
{
	vector a = { 4,2,5,1,7,6,3 };
	quick_sort(a, 0, 7);
	return 0;

}


void quick_sort(vector& nums, int l, int r)
{
	if (l + 1 >= r)
	{
		return;
	}
	int first = l, last = r - 1, key = nums[first];
	while (first < last)
	{
		while (first < last && nums[last] >= key) {
			--last;
		}
		nums[first] = nums[last];
		while (first < last && nums[first] <= key)
		{
			++first;
		}
		nums[last] = nums[first];
	}
	nums[first] = key;
	quick_sort(nums, l, first);
	quick_sort(nums, first + 1, r);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1003529.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号