经典算法之直接插入排序及其优化
来源:互联网 发布:帝国全面战争 知乎 编辑:程序博客网 时间:2024/06/05 08:39
/************************author's email:wardseptember@gmail.comdate:2017.12.9直接插入排序************************//*每一趟将一个待排序的关键字按照其值得大小插入到已经排序好的部分有序序列的适当位置上,直到所有待排序关键字都被插入到有序序列中为止。第一趟,把第一个关键字看做有序列的,从第二关键字开始插入。*/#include<iostream>#define maxSize 10using namespace std;void directlyInsertSort1(int D[], int n);//直接插入排序void directlyInsertSort2(int D[], int n);//直接插入排序改进void printArray(int D[], int n);//输出数组void main() {int D[maxSize] = {12,15,48,46,16,78,57,88,65,48};//构造一个一维数组int E[maxSize] = { 12,15,48,46,16,78,57,88,65,48 };directlyInsertSort1(D, maxSize);//直接插入排序数组cout << "直接插入排序后,结果为:" << endl;printArray(D, maxSize);//输出数组directlyInsertSort2(E, maxSize);//直接插入排序,由于上面执行完D数组已经有序,这我们构造一个与D数组完全相同的E数组进行测试。cout << "改进的直接插入排序后,结果为:"<<endl;printArray(E, maxSize);}void directlyInsertSort1(int D[], int n) {//直接插入排序,D为要排序的数组,n为D中关键字的个数int i, j;int temp;for (i = 1; i < n; ++i) {//初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1temp = D[i]; //将待排关键字存入temp中j = i - 1; //j为D[i]前一个关键字的下标//这个循环用于从待排关键字的前一个关键字开始比较,如果大于待排关键字就后移一位while (j >= 0 && temp < D[j]) {D[j + 1] = D[j];--j;}D[j + 1] = temp;//找到插入位置,将temp插入。j最后-1,所以这里加1。}}/*改进的思想是:在循环刚开始时加上一句判断,若D[i]>=D[i-1]说明D[0...i]本身就是有序的,无需调整,否则按就第一种方法调整。显而易见,某些情况下第二种方法比第一种方法效率要高*/void directlyInsertSort2(int D[], int n) {int i, j;int temp;for (i = 1; i < n; ++i) { //初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1if (D[i] < D[i - 1]) {//判断是否调整temp = D[i]; //将待排关键字存入temp中j = i - 1; //j为D[i]前一个关键字的下标 //这个循环用于从待排关键字的前一个关键字开始比较,如果大于待排关键字就后移一位while (j >= 0 && temp < D[j]) {D[j + 1] = D[j];--j;}D[j + 1] = temp;//找到插入位置,将temp插入。j最后-1,所以这里加1。}}}void printArray(int D[], int n) {for (int i = 0; i < n; ++i) //输出排序后的关键字cout << D[i] << " ";cout << endl;}以上如有错误,请指出,大家共同学习进步
阅读全文
0 0
- 经典算法之直接插入排序及其优化
- 经典排序算法之直接插入排序
- 直接插入排序及其优化
- 经典算法之Shell排序及其优化
- 经典排序算法----直接插入排序算法及其改进(稳定)
- 8种经典算法之直接插入排序
- 经典算法之直接插入排序(三种实现)
- 简单算法之插入排序及其优化shell排序
- 经典算法之插入排序(直接插入排序、shell排序)
- 算法-插入排序之直接插入排序
- 排序算法-插入排序之直接插入
- 算法之直接插入排序
- 排序算法之直接插入
- 【算法】之直接插入排序
- 排序算法之直接插入排序算法
- 经典算法之三:插入排序及二分优化
- 经典算法之插入排序
- 经典算法之插入排序
- C++ 基本语法
- 爱上Markdown--基础入门篇
- [知了堂学习笔记]_jQuery的事件
- 快速排序 从理解到掌握
- mysql 批量更新 update foreach
- 经典算法之直接插入排序及其优化
- SSH三大框架的整合
- JAVA数据存储位置
- MD5
- linux配置定时器crontab
- Postprocessing of stereo vision
- Reactive Web Applications.pdf 英文原版 免费下载
- 矩阵变换:沿任意轴旋转及其推导
- iOS 计算富文本高度和设置段落样式