改进版直接插入排序
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;
}
}完整代码:
确立好最小值并排序 :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; }
相关文章推荐
- 深入剖析排序算法(二)------直接插入排序的研究及改进
- 直接插入排序:改进算法---折半插入排序
- 直接插入排序:改进算法---2路插入排序
- 排序算法(1) —— 直接插入排序及其改进
- 排序算法(1) —— 直接插入排序及其改进
- 直接插入排序及改进
- 改进排序算法:希尔排序(对直接插入排序的改进)
- 直接插入排序到希尔排序做的那些改进
- C++排序:冒泡排序,简单选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序
- 直接插入排序
- 七种排序(直接插入、折半插入、希尔、起泡、快速、简单选择、堆排序)
- 直接插入排序和希尔排序
- 直接插入排序 练习
- 算法 直接插入排序 c语言
- 【数据结构与算法】【排序】直接插入排序的代码实现
- 直接插入排序(IS)的类模板
- 排序(冒泡、直接插入、快速排序)
- JAVA排序算法---直接插入排序
- // 直接插入排序法
- 直接插入排序的C实现