您的位置:首页 > 其它

改进版直接插入排序

2018-01-17 20:18 183 查看
直接排序的改进版: 主要两个操作:1:是确立好最小值(最大值),并将其放入数组第一个位置;2:元素依次插入进行排序,且是“从后往前推”思想。
确立好最小值并排序 :void Insert_Sort(int a[],int left,int right){
for(int i = right;i>=left;i--){ //实现将最小值放入第一个位置且固定
if(a[i+1]<a[i]){
Swap(a[i+1],a[i]);
}
}
for(int j = left+2;j<=right;j++){ //left+2是根据确立的最小值下标为0,那么元素从后往前对比只需到下标为1即可
int item = a[j]; //保存要插入的值
while(item<a[j-1]){ //以已经确立的最小值为分界点
a[j] = a[j-1];
j--;
}
a[j] = item;
}

}完整代码:
#include <iostream>
#include <cstdio>
void Swap(int a,int b){
int t ;
t = a;
a = b;
b = t;
}
void  Insert_Sort(int a[],int left,int right){
for(int i = right;i>=left;i--){    //实现将最小值放入第一个位置且固定
if(a[i+1]<a[i]){
Swap(a[i+1],a[i]);
}
}
for(int j = left+2;j<=right;j++){       //left+2是根据确立的最小值下标为0,那么元素从后往前对比只需到下标为1即可
int item = a[j];               //保存要插入的值
while(item<a[j-1]){               //以已经确立的最小值为分界点
a[j] = a[j-1];
j--;
}
a[j]  = item;
}

}
int main() {
int  a[7] = {1,6,2,3,45,26,0};
Insert_Sort(a,0,6);
printf("排序后顺序为:");
for(int i = 0;i<7;i++){
printf("%d ",a[i]) ;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: