第一层循环:遍历待比较的所有数组元素
第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较 。如果:selected > ordered,那么将二者交换 。
算法代码:
void print(int a[], int n ,int i){
cout<
for(int j= 0; j<8; j){
cout<
}
cout<
}
void InsertSort(int a[], int n)
{
for(int i= 1; i
if(a[i] < a[i-1]){ //若第i个元素大于i-1元素,直接插入 。小于的话,移动有序表后插入
int j= i-1;
int x = a[i]; //复制为哨兵,即存储待排序元素
a[i] = a[i-1]; //先后移一个元素
while(x < a[j]){ //查找在有序表的插入位置
a[j 1] = a[j];
j--; //元素后移
}
a[j 1] = x; //插入到正确位置
}
print(a,n,i); //打印每趟排序的结果
}
}
int main{
int a[8] = {3,1,5,7,2,4,9,6};
InsertSort(a,8);
print(a,8,8);
}
二、希尔排序(Shell’ s Sort)
算法思想:
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本 。但希尔排序是非稳定排序算法 。
希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序 。
算法步骤:
1.选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;
2.按增量序列个数k,对序列进行k 趟排序;
3.每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序 。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度 。
算法代码:
void print(int a[], int n ,int i){
cout<
for(int j= 0; j<8; j){
cout<
}
cout<
}
/**
* 直接插入排序的一般形式
*
* @param int dk 缩小增量,如果是直接插入排序,dk=1
*
*/
void ShellInsertSort(int a[], int n, int dk)
{
for(int i= dk; i
if(a[i] < a[i-dk]){ //若第i个元素大于i-1元素,直接插入 。小于的话,移动有序表后插入
int j = i-dk;
int x = a[i]; //复制为哨兵,即存储待排序元素
a[i] = a[i-dk]; //首先后移一个元素
while(x < a[j]){ //查找在有序表的插入位置
a[j dk] = a[j];
j -= dk; //元素后移
}
a[j dk] = x; //插入到正确位置
}
print(a, n,i );
}
}
// 先按增量d(n/2,n为要排序数的个数进行希尔排序
void shellSort(int a[], int n){
int dk = n/2;
while( dk >= 1 ){
ShellInsertSort(a, n, dk);
dk = dk/2;
}
}
int main{
int a[8] = {3,1,5,7,2,4,9,6};
//ShellInsertSort(a,8,1); //直接插入排序
shellSort(a,8); //希尔插入排序
print(a,8,8);
}
三、简单选择排序(Selection Sort)
算法思想:
简单选择排序的实现思想:比较 交换
推荐阅读
- excel合并单元格快捷键是什么
- 我来教你Excel把多个单元格内容合并到一个单元格的操作教程 我来教你跳舞
- 小编教你闪电PDF转换成WORD转换器合并或分割PDF文件的详细操作教程
- 小编教你Excel快速合并两列数据/文本的操作教程 小编教你怎么选:羽毛球拍3U和4U的区别
- 教你excel表格里直接相加来求和的操作方法 Excel表合并
- 笔记本电脑分盘教程 电脑分盘怎么合并
- 小编分享迅捷CAD编辑器把CAD里多个图形合并成块的相关流程 迅捷影视分享码
- 西樵实验小学升学率 佛山市公办小学排名?
- 教你Excel 2019自动排序编号的详细步骤教程
- 金山pdf阅读器如何合并pdf文件,几秒达成