【无标题】

1.快速排序(Quick Sort)

使用分治法策略。

基本思想是:选择一个基准数,通过一趟排序将要排的数据分割成两独立部分。

一部分比另一部分所有数据都要小。然后对两部分分别进行快速排序。整个过程可以递归进行。达到有序为止。

2.快排流程:

(1)挑基准值

(2)分区治之。将比基准值小的放基准前面,比基准大的放后面。(相等的可放任意一边);

分完后基准数处于数列中间位置。

(3)递归地将基准值前面和后面的子数列进行排序。

下面举例:

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

quick_sort(int* a,int left,int right)
{
	if (left >= right)//递归出口,还包含当数列只有一个元素就
					//不用排
	{
		return;
	}
	int i, j, key;//用来记录基准值,首元素位置,尾元素位置
	 i = left;
	 j = right;
	 key = a[i];//我们每次递归都会选择首元素作为基准值,从而分区
	 while (i < j)
	 {
		 while (i < j && a[j] >= key)
		 {
			 j--;//跳过比基准值大的
		 }
		 a[i] = a[j];//否则比基准值小,放到基准值左边
		 while (i < j && a[i] <= key)
		 {
			 i++;//跳过比基准值小的
		 }
		 a[j] = a[i];//否则比基准值大,放到基准值右边
	 }
	 a[i] = key;//当循环不满足i<j;此时i==j,将基准值放中间
	 quick_sort(a, left, i - 1);//左分区递归
	 quick_sort(a,i+1,right);//右分区递归
}

void main()
{
	int str[] = {2,3,4,10,9,8,7,6,5,1};
	int zf = sizeof(str) / sizeof(str[0]);
	quick_sort( str, 0,zf-1);
	int i;
	for (i = 0; i < zf; i++)
	{
		printf("%3d",str[i]);
	}
}

从我们记录首元素开始起,那么那个位置就相当于是空的。于是我们从右往左找一个比首元素小的(不一定是最小)放到首元素那个位置,那么此时比首元素小的位置就空出来了,我们就又从左往右找。如此反复。直到无论从左往右,还是从右往左,只剩一个空位时,将基准值放进去。

3.快速排序的时间复杂度和稳定性

3.1快排是不稳定的算法。

不满足a[i]=a[j]时,排列之前a[i]在a[j]之前排列之后还是a[i]在a[j]之前。

3.2快速排序的时间复杂度

最坏情况下是O(n^2),平均时间复杂度是O(n*lgn)。

假设被排列中有n个数,遍历一次时间复杂度是O(n),需要遍历多少次呢?最少lg(n+1)次,最多n次。

快排采用分治法遍历。我们将它看成一颗二叉树,需要遍历的次数是二叉树的深度,而根据定义,二叉树深度最少为lg(n+1)次。最大深度为n。

相关推荐
POLITE34 分钟前
Leetcode 94. 二叉树的中序遍历 104. 二叉树的最大深度 226. 翻转二叉树 101. 对称二叉树 (Day 13)
算法·leetcode·职场和发展
老鼠只爱大米6 分钟前
LeetCode经典算法面试题 #2:两数相加(迭代法、字符串修改法等多种实现方案详解)
算法·leetcode·链表·两数相加·字符串修改法·两数相减·大数运算
季明洵20 分钟前
二分搜索、移除元素、有序数组的平方、长度最小的子数组
java·数据结构·算法·leetcode
Sheep Shaun21 分钟前
深入理解AVL树:从概念到完整C++实现详解
服务器·开发语言·数据结构·c++·后端·算法
_leoatliang21 分钟前
基于Python的深度学习以及常用环境测试案例
linux·开发语言·人工智能·python·深度学习·算法·ubuntu
leiming622 分钟前
C语言联合体union的用法(非常详细,附带示例)
java·python·算法
YuTaoShao23 分钟前
【LeetCode 每日一题】3314. 构造最小位运算数组 I —— (解法二)
算法·leetcode·职场和发展
大猫子的技术日记26 分钟前
Redis 快速上手:5 分钟掌握核心能力
数据结构·数据库·redis·缓存·持久化·pub/sub
云深麋鹿27 分钟前
二.顺序表和链表
c语言·开发语言·数据结构·链表
薛定e的猫咪28 分钟前
【NeurIPS 2023】多目标强化学习算法工具库-MORL-Baselines
人工智能·算法·机器学习