IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> c++ 快排优化(三数取中法) -> 正文阅读

[数据结构与算法]c++ 快排优化(三数取中法)

快排优化(三数取中法)


前言

作为刚刚入门c和c++的小菜鸡,心血来潮决定写点学习笔记,希望大家提出改进意见。另建议先看代码在看解析。


提示:以下是本篇文章正文内容

一、三数取中法

取所选数组中最左,中间和最右的数组元素进行比较,取中间值作为基准数,先将基准数放在数组最右端,然后比基准数小的放在其左(下简称左数组),比基准数大的放在其右(下简称右数组)。

以「9,2,2,7,6,8」为例
基准数为a[5]=8,第一次快排得到的结果为
6,2,2,7,8,9
do-while循环中得到6,2,2,7,9,8
(此时left=right=4)
将left(right)与基准数交换得到结果。

二、递归思想

进行第一次快排后,分别对左数组和右数组再次进行快排(此时由于左数组和右数组的数组元素个数可能差距过大,可自行调整优化)

三、程序实现过程(代码)

1.取基准数(三数取中)

代码如下(示例):

void partition(int *arr, int left, int right){
	int mid = (left+right)>>1;					
	int t1 = arr[left], t2 = arr[mid], t3 = arr[right];
	if((t1 <= t2 && t2 <= t3) || (t3 <= t2 && t2 <= t1))
		swap(arr[right], arr[mid]);				
	else if((t2 <= t1 && t1 <= t3) || (t3 <= t1 && t1 <=t2))
		swap(arr[right], arr[left]);			 
}

2.快速排序(递归)

代码如下(示例):

void quickSort(int *arr,int l,int r){
	if (l >= r){
		return ;
	}
	int n = r-l+1;	
    partition(arr,l,r);
	int pivot = arr[r];
	do
	{
		while(l<r && arr[l]<=pivot) l++;	
		while(l<r && arr[r]>=pivot) r--;
		if(l < r)
			swap(arr[l], arr[r]);
	}while(l < r);
	arr[n-1] = arr[l];			
	arr[l] = pivot;
	quickSort(arr, 0 , l-1);
	quickSort(arr, l+1 , n-1);
}

总结

三数取中法yyds!
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-20 12:44:30  更:2021-10-20 12:45:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:34:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码