直接插入排序(Straight Insertion Sort)
body, table{font-family: 微软雅黑; font-size: 13.5pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}
|
#include<iostream>
using namespace std;
//直接插入排序
int straightInsertionSort(int* arr,int length);
void swap(int& elem1,int& elem2);
void test();
void printArr(int* arr,int length);
void swap(int& elem1,int& elem2)
{
int tmp = elem1;
elem1 = elem2;
elem2 = tmp;
}
int straightInsertionSort(int* arr,int length)
{
if(NULL==arr||length<=0)
return -1;
for(int idx=1;idx!=length;++idx)
{
//把后面的第idx个元素插入到前面的有序数组0~idx-1中
int tmp = arr[idx];
int behindIdx = idx - 1;
while(behindIdx>=0&&arr[behindIdx]>tmp)
{
arr[behindIdx+1] = arr[behindIdx];
--behindIdx;
}
arr[++behindIdx] = tmp;
}
return 0;
}
|
void printArr(int* arr,int length)
{
if(NULL==arr||length<=0)
return ;
for(int idx=0;idx!=length;++idx)
{
cout<<arr[idx]<<" ";
}
cout<<endl;
}
void test()
{
int arr[] = {6,5,3,1,8,7,2,4};
printArr(arr,8);
straightInsertionSort(arr,8);
printArr(arr,8);
cout<<endl;
int arr1[] = {1,2,3,4,5,6,7,8};
printArr(arr1,8);
straightInsertionSort(arr1,8);
printArr(arr1,8);
cout<<endl;
int arr2[] = {2,2,2,2};
printArr(arr2,4);
straightInsertionSort(arr2,4);
printArr(arr2,4);
cout<<endl;
int arr3[] = {2,2,1,2};
printArr(arr3,4);
straightInsertionSort(arr3,4);
printArr(arr3,4);
cout<<endl;
int* arr4 = NULL;
printArr(arr4,4);
straightInsertionSort(arr4,4);
printArr(arr4,4);
cout<<endl;
}
int main()
{
test();
system("pause");
}
|
|
#include<iostream>
using namespace std;
//直接插入排序改进,二分插入排序
//对左边已经排好序的序列使用二分查找,找到右边序列待插入元素要插入的位置,然后在整体移动
void test();
void printArr(int* arr,int length);
int binaryInsertionSort(int* arr,int length);
int binaryInsertionSort(int* arr,int length)
{
if(NULL==arr||length<=0)
return -1;
for(int idx=1;idx!=length;++idx)
{
int tmp = arr[idx];
int left = 0;
int right = idx-1;
int middle;
while(left<=right)
{
middle = (left+right)/2;
if(arr[middle]<=tmp) //稳定排序
left = middle + 1;
else if(arr[middle]>tmp)
right = middle - 1;
}
for(int iidx=idx-1;iidx>=left;--iidx)
{
arr[iidx+1] = arr[iidx];
}
arr[left] = tmp;
}
return 0;
}
|
void printArr(int* arr,int length)
{
if(NULL==arr||length<=0)
return ;
for(int idx=0;idx!=length;++idx)
{
cout<<arr[idx]<<" ";
}
cout<<endl;
}
void test()
{
int arr[] = {6,5,3,1,8,7,2,4};
printArr(arr,8);
binaryInsertionSort(arr,8);
printArr(arr,8);
cout<<endl;
int arr1[] = {1,2,0,-1,5,6,7,8};
printArr(arr1,8);
binaryInsertionSort(arr1,8);
printArr(arr1,8);
cout<<endl;
int arr2[] = {2,2,2,2};
printArr(arr2,4);
binaryInsertionSort(arr2,4);
printArr(arr2,4);
cout<<endl;
int arr3[] = {2,2,1,2};
printArr(arr3,4);
binaryInsertionSort(arr3,4);
printArr(arr3,4);
cout<<endl;
int arr5[] = {1,2,3,4,5,6,7,8};
printArr(arr5,8);
binaryInsertionSort(arr5,8);
printArr(arr5,8);
cout<<endl;
int* arr6 = NULL;
printArr(arr6,4);
binaryInsertionSort(arr6,4);
printArr(arr6,4);
cout<<endl;
}
int main()
{
test();
system("pause");
}
|
直接插入排序(Straight Insertion Sort)的更多相关文章
- 插入排序—直接插入排序(Straight Insertion Sort)
基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插插入到已入,直至整个序列有序为止. 要点: ...
- 排序之直接插入排序(Straight Insertion Sort)
一.直接插入排序(Straight Insertion Sort) 排序的过程如下:给定无需序列:(3,6,9,7,1,8,2,4) ① 3,6,9,7,1,8,2,4 (将6插入到有序序列3中) ② ...
- 直接插入排序(Straight Insertion Sort)的C语言实现
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 直接插入排序(Straight Insertion Sort)的基本思想是将新记录插入到 ...
- 直接插入排序(Straight Insertion Sort)
直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的.记录数增1的有序表. /* 对顺序表L作直接插入排序 */ void ...
- 直接插入排序(Straight Insertion Sort)
1.定义 直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的.记录数增1的有序表. 插入排序(Insertion Sort ...
- 《算法4》2.1 - 插入排序算法(Insertion Sort), Python实现
排序算法列表电梯: 选择排序算法:详见 Selection Sort 插入排序算法(Insertion Sort):非常适用于小数组和部分排序好的数组,是应用比较多的算法.详见本文 插入排序算法的语言 ...
- 【算法】插入排序(Insertion Sort)
(PS:内容参考MIT算法导论) 插入排序(Insertion Sort): 适用于数目较少的元素排序 伪代码(Pseudocode): 例子(Example): 符号(notation): 时间复杂 ...
- 【排序基础】5、插入排序法 - Insertion Sort
插入排序法 - Insertion Sort 文章目录 插入排序法 - Insertion Sort 插入排序设计思想 插入排序代码实现 操作:插入排序与选择排序的比较 简单记录-bobo老师的玩转算 ...
- 【算法】插入排序(Insertion Sort)(三)
插入排序(Insertion Sort) 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相 ...
随机推荐
- HTML如何实现滚动文字
HTML如何实现滚动文字 一.总结 一句话总结:marquee标签,也可以用js和css来实现 marquee标签 也可jss和css <marquee><span style=&q ...
- Ubuntu自带截图工具screenshoot
- 4、Ubuntu系统环境变量详解
参考:Linux公社Ubuntu系统环境变量详解 UNIX/Linux系统中的环境变量和库文件的使用方法 由于Linux系统严格的权限管理,造成Ubuntu系统有多个环境变量配置文件,因此我们需要了解 ...
- Watto and Mechanism CodeForces - 514C (字典树,哈希)
大意: 给定字符串集$S$, 每次询问给出字符串$a$, 求$S$中是否存在一个字符串恰好与$a$相差一个字符. 直接建字典树暴力复杂度是$O(n\sqrt{n})$, 也可以用set维护所有哈希值, ...
- 对偶图 并查集 BZOJ4423
题目链接 题目因为要根据上一次的输出结果来判断这次的输入,也就是要求我们强制在线,不能够把输入全部储存后处理 如果不要求强制在线,我们可以先把所以输入储存起来,从最后开始处理,把删边改成加边,如果在加 ...
- org.json.JSONException: JSONObject["shophours"] not found.
没有这个元素造成的.问题代码: value = jsonObject.get(entry).toString(); 分析原因: json中没有这个key,更没有这个key所对应的值 解决办法:判断一下 ...
- SQLServer2012数据库降级至SQLServer2008R2的方法
一. 背景 因为对方的客户的服务器安装的数据版本2012,公司开发同事需要客户数据库的备份数据,但是公司数据版本是2008R2的,无法还原. 由于2012备份无法直接还原至2008R2(MSSQ ...
- 『TensorFlow』生成式网络中的图片预处理
简介 这里的生成式网络是广义的生成式,不仅仅指gan网络,还有风格迁移中的类自编码器网络,以及语义分割中的类自编码器网络,因为遇到次数比较多,所以简单的记录一下. 背景 1.像素和数字 图像处理目标一 ...
- ACM-ICPC 2018 南京赛区网络预赛Skr
题意:求本质不同的回文子串的和 题解:先构造pam,然后根据pam的原理(ch表示在该节点表示的回文串两侧加上该字符)对于每个节点维护一个表示该节点字符串的值,加起来即可 //#pragma GCC ...
- git中.gitignore文件不起作用的解决
git rm -r --cached . git add . git commit -m 'update .gitignore'