插入排序(折半查找优化插入排序||希尔排序) _清风明月
插入排序:插入排序分为三个步骤:
1. 找位置。(序列可分为两个部分,第一个部分是有序序列,其二是非有序序列。当为有序序列时,查找可以改进为折半查找,优化算法速度。)
2. 移动。
3. 插入。查找的折半查找:(基于已经有序的序列:升序)
while(low>=high)时
low________mid________high
low=0 key high=length-1
如果key值(目前需要比较的值)比mid值小,则查找左半部分,high=mid-1
反之,比mid值大,则查找右半部分,low=mid+1优化可用希尔排序进行排序
希尔排序,从第一个开始,每到第x个,就打上标记,以间隔为x的元素进行比较,可进行多次比较。
x=5.
49 38 65 97 76 13 27 49 55 04
* & ^ * & ^
希尔排序的x,将被统一存入一个一维数组进行调用,but最后的间隔必须为1,也就是插入排序。
使用希尔排序的算法,可以类似于把区间进行整齐的区域划分(这里跟归并排序的思想有点相似。),希尔排序作用:防止最坏可能调用原始插入排序的时间复杂度。1.插入排序
自拟题目格式:
输入:
一共T组数据。
每组数据,n个需要排序的数。n<=100;
排序按照升序进行排序。
实验数据:
2
5
11 32 22 58 96
4
3 4 5 12. 折半查找
自拟题目格式:
输入:
一共T组数据。
每组数据,n个需要排序的数。n<=100;
排序按照升序进行排序。
实验数据:
2
5
11 32 22 58 96
4
3 4 5 13. 希尔排序
自拟题目格式:
输入:
一共T组数据。
每组数据,t个不同值的间隔x1,xt;
每组数据,n个需要排序的数。n<=100;
排序按照升序进行排序。
实验数据:
3
3 5
5 2 1
11 32 22 58 96
3 4
5 2 1
3 4 5 1
3 10
49 38 65 97 76 13 27 49 55 04插入排序代码:
#include"stdafx.h"
#include<iostream>
using namespace std;
int main()
{
int T, n, i, j, a[105], k;
cin >> T;
while (T--)
{
cin >> n;
for (i = 0; i < n; ++i)
cin >> a[i];
for (i = 1; i < n; ++i)
for (j = 0; j < i; ++j)
{
if (a[i] < a[j])
{
int key = a[i];//1
for (k = i - 1; k >= j; --k)
a[k + 1] = a[k];//5//4//3
a[k+1] = key;//1
}
}
for (i = 0; i < n; ++i)
cout << a[i] << " ";
cout << endl;
}
return 0;
}插入排序折半查找优化代码:
//折半查找
int main()
{
int T, n, a[105], i, j, low, high, mid = 0;
cin >> T;
while (T--)
{
cin >> n;
for (i = 0; i < n; ++i)
cin >> a[i];
for (i = 1; i < n; ++i)//a[i]是要查找的数。
{
high = i - 1, low = 0;
while (low <= high)
{
mid = (low + high) / 2;
if (a[i] < a[mid])
high = mid - 1;
else
low = mid + 1;
}
if (a[i] < a[mid])
{
int key = a[i];//1
for (j = i - 1; j >= mid; --j)
a[j + 1] = a[j];//5//4//3
a[j + 1] = key;//1
}
}
for (i = 0; i < n; ++i)
cout << a[i] << " ";
cout<<endl;
}
return 0;
}插入排序希尔排序优化代码:
int main()
{
int T, t, n, i, j, k, l, a[105], xier[5];
cin >> T;
while (T--)
{
cin >> t >> n;
for (i = 0; i < t; ++i)
cin >> xier[i];
for (i = 0; i < n; ++i)
cin >> a[i];
for (l = 0; l < t; ++l)
{
for (i = xier[l]; i < n; i += xier[l])//a[i]是要查找的数。
for (j = 0; j < i; j += xier[l])
{
if (a[i] < a[j])
{
int key = a[i];//1
for (k = i - xier[l]; k >= j; k -= xier[l])
a[k + xier[l]] = a[k];//5//4//3
a[k + xier[l]] = key;//1
}
}
}
for (i = 0; i < n; ++i)
cout << a[i] << " ";
cout << endl;
}
return 0;
}
插入排序(折半查找优化插入排序||希尔排序) _清风明月相关推荐
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- ds排序--希尔排序_图解直接插入排序和希尔排序
前言 这次我们介绍插入类排序中的 直接插入排序 和 希尔排序 . 对于直接插入排序,虽然它的时间复杂度也是 O(n^2) ,但是在元素 有序或近乎有序 的情况下,时间复杂度可以降为 O(n) ,效率比 ...
- ds排序--希尔排序_排序算法 - 希尔排序分析及优化
希尔排序 1 算法思想 希尔排序,也被称为递减增量排序,是简单插入排序的一种改进版本. 在插入排序中,如果待排序列中的某个元素,距离有序数列中待插入位置非常远,就需要比较很多次才可以到达插入位置,这是 ...
- python实现希尔排序_希尔排序算法的python实现
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. def shellSort(items): inc = len(items) / 2 wh ...
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)...
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20043459 前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃 ...
- python实现希尔排序算法_排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)...
其实本文叫排序算法总结有点过了,只是用python实现了一遍.本文都是参照一篇csdn博客<数据结构排序算法>,里面详细介绍每种排序算法的原理,并给出了C++的实现,再次膜拜. # -*- ...
- 【Java】插入排序、希尔排序详解
文章目录 1️⃣必备排序常识 2️⃣插入排序 1.直接插入排序 2.优化后的插入排序 3.折半插入排序 4.性能比较 3️⃣希尔排序 性能比较 1️⃣必备排序常识 稳定性:在原序列中,r[i]=r[j ...
- 十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序
文章目录 一.冒泡排序 1.1 冒泡排序基础[必会知识] 1.2 冒泡排序优化 1.2.1 外循环优化 1.2.2 内循环优化 1.2.3 双向遍历 1.3 冒泡排序的稳定性.复杂度和适用场景 1.3 ...
- 九大经典算法之插入排序、希尔排序
01 插入排序(Insertion Sort) 原理:每次选择一个元素,并且将这个元素和整个数组中的所有元素进行比较,然后插入到合适的位置. void insertion_sort(int arr[] ...
最新文章
- 13岁小孩都跟我抢Python了,完了!
- Linux中apt-get update和apt-get upgrade命令的区别
- 应用服务器与数据库之间是长连接,要接收多个 tcp 长连接不断发送的数据并存储,哪些数据库或数据存储方案比较合适?...
- 【Solr】 solr对拼音搜索和拼音首字母搜索的支持
- django-中间件
- 软件测试中的存根程序
- php smarty分页原理,SMARTY分页详解
- weblogic部署,常见错误解决——Unmarshaller failed
- 五、扩展Orchard(五) Writing a Content Part
- 自动驾驶落地物流场景,嬴彻科技驶入快车道
- mapxtreme相关
- js判断是否微信浏览器
- 前后端交互、Node、npm、Express、mysql基础
- linux cpu使用率 理解,深入理解Linux的CPU使用率
- matlab中zeta函数,黎曼zeta函数是什么,具体点
- Thinkphp 5.0 仿百度糯米开发多商家电商平台
- oracle-DDL对表的操作
- matlab图像雅可比行列式,函数矩阵与行列式(雅可比(Jacobi)矩阵与行列式)雅克...-雅可比矩阵-数学-詹底巧同学...
- JavaScript代码在哪里放置?
- 一块钱可以拿到一包加拿大西洋参 一块钱可以拿到一盒50g正韩一宫庄高丽参 一块钱可以拿到一套保鲜扣扣 一块钱能拿到一盒一宫庄鹿茸 可以去哪里拿? 看在我们的情分上告送你 可以加微**信188 247