提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

天勤2022数据结构(七)排序

  • 前言
  • 易混知识点
  • 一、基础算法
  • 二、综合应用题
  • 总结

前言


稳定:guibing
不稳定: 些儿 朋友

易混知识点

  1. 与序列初始状态无关: 堆排序   简单选择排序
  2. 初始为递增 按递增排序:
    • 高效:直接插入   冒泡
    • 低效:快速排序

一、基础算法

  1. 插入排序

    1. 直接插入排序

    2. 折半插入排序

      减少 比较 次数

    3. 希尔排序

      不能保证每趟排序至少能将一个关键字放在其最终位置上

      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;}}
      }
      
  2. 选择排序

    1. 简单选择排序

      比较次数 与 初始序列 无关(全比较)

    2. 堆排序

      // 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); }
      }
      
  3. 交换排序

    1. 冒泡排序

      排序趟数 与 序列的原始状态 有关

    2. 快速排序

      有序情况下 退化为冒泡排序
      递归次数 与 划分后分区的处理顺序 无关 (视为二叉树,多少个结点,遍历多少次 )
      [真题] 最好用 顺序结构存储
      一趟之后 确定一个关键字 左边的(可以没有)小于    右边的(可以没有)大于

      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);}
      }
      
  4. 二路归并排序

    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];

  5. 基数排序

    不需要关键字的比较

二、综合应用题

总结

提示:这里对文章进行总结:

天勤2022数据结构(七)排序相关推荐

  1. 天勤2022数据结构(六)图

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 天勤2022数据结构(六)图 前言 一.基础算法 例题 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 拓扑排 ...

  2. 数据结构 实验七 排序技术的编程实现

    实验七  排序技术的编程实现 [实验目的] 排序技术的编程实现 要求: 排序技术的编程实现(2学时,综合型),掌握排序技术的编程实现,可以实现一种,也可以实现多种.也鼓励学生利用基本操作进行一些应用的 ...

  3. 2022天勤考研数据结构笔记 第3章 栈和队列

    2022天勤考研数据结构笔记 第3章 栈和队列(更新中) 第3章 栈和队列 3.1 结构体定义 3.2 顺序栈 3.3 链栈 3.4 栈的应用 3.5 顺序队 3.6 链队 第3章 栈和队列 栈和队列 ...

  4. 2022天勤考研数据结构笔记 第2章 线性表

    2022天勤考研数据结构笔记 第2章 线性表(更新中) 第2章 线性表 2.1 结构体定义 2.2 顺序表 2.3 单链表 2.4 双链表 2.5 循环链表 2.6 逆置问题(408重要考点) 第2章 ...

  5. 【数据结构】排序算法及优化整理

    排序算法 排序算法 选择排序 Selection Sort 插入排序 Insertion Sort 归并算法 Merge Sort 快速排序 Quick Sort 堆排序 Heap Sort 二叉堆的 ...

  6. 【数据结构】排序相关题目及各种排序方法的总结

    [数据结构之排序] 常用的排序方法有:直接插入排序.希尔排序.冒泡排序.快速排序.简单选择排序.树形选择排序.堆排序.归并排序.基数排序 提示:如有不理解的知识点,请看B站最好的数据结构老师王卓老师的 ...

  7. 鸡尾酒排序算法c语言,[golang] 数据结构-鸡尾酒排序

    吐个槽 又是一个不正经取名的排序算法.真要说和鸡尾酒间的关系,大概就是想喝到鸡尾酒(得到排序好的队列)就要摇晃酒杯让不同的成分混合均匀(向两个方向冒泡排序) 原理 鸡尾酒排序(Cocktail Sor ...

  8. 数据结构------选择排序

    数据结构------选择排序 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> void simpleSelectSor ...

  9. 数据结构-王道-排序

    排序 关于排序算法的视频演示 直接插入排序 从上面的插入排序思想中,不难得到一种简单直接的插入排序算法.假设待排序表在某次过程中属于这种情况. |有序序列\(L[1\ldots i-1]\)|L(i) ...

  10. 希尔排序python 简书_数据结构_排序_直接插入+希尔排序

    数据结构_排序_直接插入排序+希尔排序 其实主要是为了讲述希尔排序,不过插入排序是希尔排序的基础,因此先来讲直接插入排序. 一.直接插入排序 1.原理 下标 0 1 2 3 4 5 6 7 8 -- ...

最新文章

  1. 《OpenMP编译原理及实现技术》摘录
  2. wxpython dataview处理大量数据_38个常用Python库:数值计算、可视化、机器学习等8大领域都有了...
  3. 【译】Withdrawal symptoms
  4. 【收藏】在QGIS中导入GOOGLE、BING等地图和卫星影像(插件方式和XYZ方式)
  5. 使用Flash读取COOKIE
  6. Spring Boot(4)---入门:安装Spring Boot
  7. 人机工程学产品设计案例_专业解读——产品设计
  8. Android studio安装,提示haxm device is not found 需要下载微软补丁 完美解决
  9. 手机号码或账号查询支付宝名字和性别
  10. 调用ISBN接口查询图书的信息
  11. 名词性从句的时态规则
  12. NovelAi + Webui + Stable-diffusion本地配置
  13. 2019icpc徐州站 H题 Yuuki and a problem(树套树(树状数组套主席树))
  14. jenkins教程菜鸟_菜鸟 jenkins自动化测试构建实战
  15. java传真发送_调用java API发送传真
  16. 中国建造了世界上最大的超级计算机,中国超级计算机创造出世界最大虚拟宇宙...
  17. APT(Advanced Packaging Tool)
  18. Type interface com.dao.StudentDao is not known to the MapperRegistry.
  19. BUG克星:几款优秀的BUG跟踪管理软件
  20. stat驱动_由机器学习驱动的stat arb对冲基金

热门文章

  1. 网络渗透基本思路及方法
  2. hadoop配置HA详细教程
  3. MySQL常用命令大全(完整)
  4. 计算机开机提示dll,电脑开机提示找不到iertutil.dll的解决妙招
  5. js根据本地文件路径上传文件(流上传)
  6. python进阶到高阶大全(强烈推荐)
  7. 2019.11.27 阵列信号处理
  8. selenium + python环境搭建步骤
  9. Scala下载和配置
  10. WinRAR去广告实现