第九章 内部排序

排序:重点在于对于记录的关键字进行排序,得到按关键字有序记录序列
分为:
    A.内部排序: 排序过程在内存中进行 
    B.外部排序: 待排序记录数据量过大,需要借助外部存储设备
排序的稳定性:排序后有相同关键字的记录顺序不变就是稳定的排序

插入类排序:
1.直接插入排序:将新加入的记录的关键字与之前的记录关键字从后往前比较,
               若较小,则向前比较,同时进行比较的记录后移一个位置,直到找到小于等于的关键字,插入在其后.

实例代码如下:

void InsSort(int r[], int length){//r可以设置为结构数组,这里认为是数组 int i,j;for(i = 2; i < length; i++){ // i=2开始,i=1为第一个元素,认为是子表,i=0设置为监视哨 r[0] = r[i];//将待插入记录存到监视哨中,临时保存 j = i - 1;  //i为初始待插入记录位置,i-1为需要比较的记录位置while(r[0] < r[j]){r[j+1] = r[j];j--;} r[j+1] = r[0];}
} 

优点:算法简单,适用于记录数目较少且基本有序
时间复杂度:O(n^2).

2.折半插入排序:类似于快排

示例代码如下:

void BinSort(int r[], int length){int i, x, j;int low, high, mid;for(i = 2;i <= length; i++){x = r[i];low = 1;high = i - 1;while(low < high){//Attention!不取等,书上是错的 mid = (low + high) / 2;if(x < r[mid])high = mid - 1;elselow = mid + 1;}for(j = i - 1; j >= low; j--)r[j+1] = r[j];r[low] = x; }
} 

时间复杂度:O(n^2).
需要比较的次数最大为其折半判定树的深度log2(n)

3.希尔排序:排序结果,基本有序;又称缩小增量排序;将关键字序列分为若干个子序列,对子序列插入排序

void f1(int r[], int length, int d){//d为这一轮子序列长度(增量) int i, j;for(i = 1+d; i <= length; i++){if(r[i] < r[i-d]){r[0] = r[i];for(j = i - d; j > 0 && r[j] > r[0]; j -= d){r[j + d] = r[j];}//如果子序列后者的记录关键字比前小,就复制前者到后者 r[j + d] = r[0];//复制要交换的一个到适合的位置 }}
} void f2(int r[], int length, int d[], int n){for(i = 0; i < n; i++)//d[]为增量数组,n为该数组长度 d[n-1] == 1; f1(r, length, d[i]);
}

时间复杂度:O(n^1.5).
算法不是稳定的 .

交换类排序:

1.冒泡排序(相邻比序法):反复扫描记录序列,依次交换逆序记录的位置


void BubbleSort(int r[], int n){bool change = true;int i,j;int x = 0;for(i = 1; i < n && change; i++){change = false;for(j = 1; j <= n - i; j++){if(r[j]>r[j+1]){x = r[j];r[j] = r[j+1];r[j+1] = x;change = true;}}}
} //下面这种简单些:上升法,不带标记
void BubbleSort(int r[], int n){int i, j, k;for(i = 0; i < n; i++){for(j = n - 2; j >= i; j--){if(r[j] > r[j+1]){k = r[j];r[j] = r[j+1];r[j+1] = k;}}}
}时间的复杂度:O(n^2). 

2.快排:原理:一次性可以消除多个逆序来减少耗费时间
找到一个划分元,关键字小的移到前面,大的移到后面,递归在子序列中找出划分元.直到子表长度小于等于1


void QKSort(int r[], int low. int high){if(low < high){pos = QKPass(r, low, high);//再次快排QKSort(r, low, pos -1);QKSort(r, pos +1, high); }
} 一趟快速排序算法:
int QKPass(int r[], int low, int high){int x;while(low < high){while(low < high && r[high] > x)high--;if(low < high){r[low] = r[high];low++;}    while(low < high && r[low] < x)low++;if(low < high){r[high] = r[low];high--;}       }r[low] = x;return low;
}
时间复杂度:O(nlog2(n)) 

数据结构-第九章 内部排序-知识点总结1相关推荐

  1. 数据结构-第九章 内部排序-知识点总结2

    选择类排序: 1.简单选择排序: 直接从数组中选择最小的记录和第一个记录交换位置,循环. 示例代码如下: void SelectSort(int r[], int b){int i, j, k;int ...

  2. 读书笔记_大话数据结构第九章_排序

    排序 冒泡[O的n方] 简单选择[O的n方]

  3. 大话数据结构第九章---排序

    马上要把大话数据结构这本书看完啦,现在已经对数据结构有了一种系统上的了解,后面的事情就疯狂练习力扣上的编程题目啦,第九章是本书的最后一章,却是以前我学数据结构最先学的部分-----排序. 排序 网页搜 ...

  4. 《数据结构》-第八章 排序(知识点总结)

    第八章 排序 排序作为各类数据结构的相应的运算的一种,在很多领域中都有广泛的应用.主要的排序方法有插入排序.交换排序.选择排序.二路归并排序.基数排序.外部排序等各类排序方法.堆排序.快速排序和归并排 ...

  5. 数据结构实验:内部排序算法的性能分析

    文章目录 前言 一.问题描述 二.问题分析 三.实验结果及分析 (1)实验数据描述 (2)实验结果 (3)性能分析 四.源代码 前言 记录下本学期的数据结构实验 本实验主要集中于比较几种内部排序算法 ...

  6. 《数据结构》之内部排序算法比较

    前言 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间.试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受. 基本要求: (1) 从以下常用的内部排 ...

  7. 各种排序(数据结构复习之内部排序算法总结)

    1.三种选择排序(简单选择排序,树形选择排序,堆排序) #include<iostream> #include<cstring> #include<string> ...

  8. python 实现数据结构八种内部排序算法

    目录 一.插入排序 二.希尔排序 三.冒泡排序 四.快速排序 五.选择排序 六.堆排序 七.归并排序 八.基数排序 一.插入排序 array_test = [8,3,5,1,10,4,2,6,7,9] ...

  9. 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第10章  内部排序 - 直接插入排序 --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课 ...

最新文章

  1. Ubuntu Server 命令行下的默认语言 中文乱码
  2. 【Android工具】安卓手机淘宝双十二活动脚本,1212淘宝冲能量半自动程序
  3. Kaggle 数据清洗挑战 Day 1 - 手把手教你五步处理缺失值
  4. error: invalid use of incomplete type 'struct word'|
  5. Hadoop_28_MapReduce_自定义 inputFormat
  6. [Misc]IE浏览器真正全屏幕操作技巧
  7. 100条常用SQL语句
  8. lazarus编译程序提示不能加载PostgreSQL客户端动态库“libpq.dll“
  9. SofaRpc源码学习篇-netty以及跟dubbo骚操作,负载均衡
  10. “校长”,我的同事,神奇的秋名山车神
  11. 视觉层次设计方法论:提升界面设计的易读性
  12. c语言坦克大战程序设计,用纯C语言实现坦克大战
  13. 九连环的解法(收集)
  14. 地图配色及网络地图比较
  15. 笔记本 原因代码: 0x500ff 关机类型: 关闭电源_图吧垃圾佬关于笔记本电池更换的几项建议...
  16. javaweb,img问题scr路径
  17. 电脑CapsLock大小写切换不回来?
  18. 中国港口码头市场运营分析及“十四五”规划建议报告2022年版
  19. php 自定义字段erp,ERP自定义单据界面、自定义字段
  20. 代码: 0x80131500:应用商店崩溃了修复

热门文章

  1. Android之如何解决刚下载的Android studio(包括上面的菜单栏)乱码问题
  2. 学习socket nio 之 mina实例
  3. 2560x1600分辨率高吗_做设计还弄不清分辨率和像素之间的关系,来了解下他们是怎么换算...
  4. 地壳中元素含量排名记忆口诀_Nature:利用熔融包裹体的元素和同位素示踪俯冲带流体来源...
  5. c语言指针索引数组,C语言数组指针表示法
  6. 暴击!被初中生碾压智商!这份被国家数学集训队采用的初中奥数资料究竟有多厉害?...
  7. 这9个人气超高的公众号,你还没关注吗?
  8. JAVA类思维_面向对象思维 Java中的类和对象及其应用
  9. python获取div标签的id_Python 获取div标签中的文字实例
  10. mysql重装远程服务未_MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)...