天勤2022数据结构(七)排序
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
天勤2022数据结构(七)排序
- 前言
- 易混知识点
- 一、基础算法
- 二、综合应用题
- 总结
前言
稳定:guibing
不稳定:快 些儿 选 一堆朋友
易混知识点
- 与序列初始状态无关: 堆排序 简单选择排序
- 初始为递增 按递增排序:
- 高效:直接插入 冒泡
- 低效:快速排序
一、基础算法
插入排序
直接插入排序
折半插入排序
减少 比较 次数
希尔排序
不能保证每趟排序至少能将一个关键字放在其最终位置上
void shellSort(int arr[], int n){int temp;for(int gap = n/2; gap>0; gap/=2){for(int i = gap; i<n; i++){temp = arr[i];int j;for(j=i; j>=gap && arr[j-gap]>temp; j-=gap){arr[j] = arr[j - gap];}arr[j] = temp;}} }
选择排序
简单选择排序
比较次数 与 初始序列 无关(全比较)
堆排序
// arr[low]-arr[high] 对low上的结点进行调整 void Sift(int arr[], int low, int high){int i = low, j = 2*i+1;int temp = arr[i];while(j <= high){if(j < high && arr[j] < arr[j+1]){j++;}if(temp < arr[j]){arr[i] = arr[j];i = j;j = 2 * i + 1;}else{break;} }arr[i] = temp; }void heapSort(int arr[], int n) {int i, temp;// 建堆for(i = n/2-1; i>=0; i--){Sift(arr, i, n-1);}// 维护(逐个移出堆顶元素后的维护)for(i = n-1; i>0; i--){temp = arr[0];arr[0] = arr[i];arr[i] = temp;Sift(arr, 0, i-1); } }
交换排序
冒泡排序
排序趟数 与 序列的原始状态 有关
快速排序
有序情况下 退化为冒泡排序
递归次数 与 划分后分区的处理顺序 无关 (视为二叉树,多少个结点,遍历多少次 )
[真题] 最好用 顺序结构存储
一趟之后 确定一个关键字 左边的(可以没有)小于 右边的(可以没有)大于void quick_sort(int arr[], int l, int r) {int temp;int i = l, j = r , x = arr[l + r >> 1];if(i < j){temp = arr[l];// 后往前while(i<j && arr[j]>=temp) j--;if(i<j){arr[i] = arr[j];i++; // i右移}// 前往后while(i<j && arr[i]<=temp) i++;if(i<j){arr[j] = arr[i];j--; // j左移}arr[i] = temp;quick_sort(arr, l, j), quick_sort(arr, j + 1, r);} }
二路归并排序
void mergeSort(int A[], int low, int high){if(low < high){int mid = (low + high)/2;mergeSort(A, low, mid);mergeSort(A, mid+1, high);merge(A, low, mid, high);} }void merge(int A[], int low, int mid, int high){int i, j, k;int len1 = mid - low + 1;int len2 = high - mid;int L[len1], R[len2];for(i = 0; i<len1; i++)L[i] = A[low+i]; for(j = 0; j<len2; j++)R[j] = A[mid + 1 + j];i = 0; j = 0; k = low;while(i<len1 && j<len2){if(L[i] <= R[i]){A[k] = L[i];i++;}else{A[k] = R[j];j++;}k++;} while(i<len1) A[k++] = L[i++];while(j<len2) A[k++] = R[j++]; }
【易错点】
L[i] = A[low+i];
R[j] = A[mid + 1 + j];基数排序
不需要关键字的比较
二、综合应用题
总结
提示:这里对文章进行总结:
天勤2022数据结构(七)排序相关推荐
- 天勤2022数据结构(六)图
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 天勤2022数据结构(六)图 前言 一.基础算法 例题 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 拓扑排 ...
- 数据结构 实验七 排序技术的编程实现
实验七 排序技术的编程实现 [实验目的] 排序技术的编程实现 要求: 排序技术的编程实现(2学时,综合型),掌握排序技术的编程实现,可以实现一种,也可以实现多种.也鼓励学生利用基本操作进行一些应用的 ...
- 2022天勤考研数据结构笔记 第3章 栈和队列
2022天勤考研数据结构笔记 第3章 栈和队列(更新中) 第3章 栈和队列 3.1 结构体定义 3.2 顺序栈 3.3 链栈 3.4 栈的应用 3.5 顺序队 3.6 链队 第3章 栈和队列 栈和队列 ...
- 2022天勤考研数据结构笔记 第2章 线性表
2022天勤考研数据结构笔记 第2章 线性表(更新中) 第2章 线性表 2.1 结构体定义 2.2 顺序表 2.3 单链表 2.4 双链表 2.5 循环链表 2.6 逆置问题(408重要考点) 第2章 ...
- 【数据结构】排序算法及优化整理
排序算法 排序算法 选择排序 Selection Sort 插入排序 Insertion Sort 归并算法 Merge Sort 快速排序 Quick Sort 堆排序 Heap Sort 二叉堆的 ...
- 【数据结构】排序相关题目及各种排序方法的总结
[数据结构之排序] 常用的排序方法有:直接插入排序.希尔排序.冒泡排序.快速排序.简单选择排序.树形选择排序.堆排序.归并排序.基数排序 提示:如有不理解的知识点,请看B站最好的数据结构老师王卓老师的 ...
- 鸡尾酒排序算法c语言,[golang] 数据结构-鸡尾酒排序
吐个槽 又是一个不正经取名的排序算法.真要说和鸡尾酒间的关系,大概就是想喝到鸡尾酒(得到排序好的队列)就要摇晃酒杯让不同的成分混合均匀(向两个方向冒泡排序) 原理 鸡尾酒排序(Cocktail Sor ...
- 数据结构------选择排序
数据结构------选择排序 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> void simpleSelectSor ...
- 数据结构-王道-排序
排序 关于排序算法的视频演示 直接插入排序 从上面的插入排序思想中,不难得到一种简单直接的插入排序算法.假设待排序表在某次过程中属于这种情况. |有序序列\(L[1\ldots i-1]\)|L(i) ...
- 希尔排序python 简书_数据结构_排序_直接插入+希尔排序
数据结构_排序_直接插入排序+希尔排序 其实主要是为了讲述希尔排序,不过插入排序是希尔排序的基础,因此先来讲直接插入排序. 一.直接插入排序 1.原理 下标 0 1 2 3 4 5 6 7 8 -- ...
最新文章
- 《OpenMP编译原理及实现技术》摘录
- wxpython dataview处理大量数据_38个常用Python库:数值计算、可视化、机器学习等8大领域都有了...
- 【译】Withdrawal symptoms
- 【收藏】在QGIS中导入GOOGLE、BING等地图和卫星影像(插件方式和XYZ方式)
- 使用Flash读取COOKIE
- Spring Boot(4)---入门:安装Spring Boot
- 人机工程学产品设计案例_专业解读——产品设计
- Android studio安装,提示haxm device is not found 需要下载微软补丁 完美解决
- 手机号码或账号查询支付宝名字和性别
- 调用ISBN接口查询图书的信息
- 名词性从句的时态规则
- NovelAi + Webui + Stable-diffusion本地配置
- 2019icpc徐州站 H题 Yuuki and a problem(树套树(树状数组套主席树))
- jenkins教程菜鸟_菜鸟 jenkins自动化测试构建实战
- java传真发送_调用java API发送传真
- 中国建造了世界上最大的超级计算机,中国超级计算机创造出世界最大虚拟宇宙...
- APT(Advanced Packaging Tool)
- Type interface com.dao.StudentDao is not known to the MapperRegistry.
- BUG克星:几款优秀的BUG跟踪管理软件
- stat驱动_由机器学习驱动的stat arb对冲基金