[算法与数据结构] - No.1 直接插入排序
2017-08-01 14:59
337 查看
插入排序的基本思想 每步将一个待排序的对象, 按其排序码大小, 插入到前面已经排好序的一组对象的适当位置上, 直到对象全部插入为止
当算法进行到第i遍时,对于下表为i的数组元素arr[i]:
判断arr[i] 与[0,i-1]内数组的关系;
找到下标j(j>=0 && j<i-1)使得arr[i]>arr[j]
将[j+1,i-1]内的数向后移以为,将arr[i]插入到arr[j+1]上
算法描述为
InsertSort.cpp
这是最简单的插入排序,先搜索然后移动插入。我们可以把搜索和插入的这个步骤合并起来
减少了一个for循环,只需要两个for循环
P.S.文章不妥之处还望指正
当算法进行到第i遍时,对于下表为i的数组元素arr[i]:
判断arr[i] 与[0,i-1]内数组的关系;
找到下标j(j>=0 && j<i-1)使得arr[i]>arr[j]
将[j+1,i-1]内的数向后移以为,将arr[i]插入到arr[j+1]上
算法描述为
InsertSort.cpp
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; int main() { int n; int arr [1000] = {0}; while(cin >> n) { //读入数组 for(int i = 0 ; i < n ; i ++) { cin>>arr[i]; } int j,k,l; //算法执行 k-1 次 for(k = 1; k<n; k++) { //从后往前找第一个比arr[k]小的数 for(j = k-1; j>=0; j--) { if(arr[k]>=arr[j]) { break; } } //如果j = k-1 不需要交换 if(j!=k-1) { int temp = arr[k]; for(l = k-1; l>j; l--) { arr[l+1] = arr[l]; } arr[j+1] = temp; } } for(int i = 0 ; i < n ; i ++) { cout<<arr[i]<<" "; } } return 0; }
这是最简单的插入排序,先搜索然后移动插入。我们可以把搜索和插入的这个步骤合并起来
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; int main() { int n; int arr [1000] = {0}; while(cin >> n) { //读入数组 for(int i = 0 ; i < n ; i ++) { cin>>arr[i]; } int j,k,l; for(k = 1; k < n ; k ++) { //如果 arr[k] 比 arr[k-1]大,由于之前都是有序的,所以不用插入 if(arr[k]<arr[k-1]) { int temp = arr[k]; //比较后的直接移动 for(j = k - 1;j>=0 && arr[j]>temp;j--) { arr[j+1] = arr[j]; } arr[j+1] = temp; } } for(int i = 0 ; i < n ; i ++) { cout<<arr[i]<<" "; } } return 0; }
减少了一个for循环,只需要两个for循环
P.S.文章不妥之处还望指正
相关文章推荐
- 【数据结构----笔记3】插入排序算法之【直接插入排序】
- 第16周SHH数据结构-【项目1-验证算法(1)直接插入排序】
- 算法与数据结构(四)--插入排序(直接插入排序)
- 直接插入排序 - 数据结构和算法90
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 数据结构-排序算法之插入排序(直接插入,二分插入,希尔,表插入)
- 数据结构与算法——冒泡排序,选择排序,直接插入排序
- 【算法】直接插入排序
- 白话经典算法系列之二 直接插入排序的三种实现
- 算法-插入排序之直接插入排序
- 白话经典算法系列之二 直接插入排序的三种实现
- 数据结构 查找及排序算法、直接插入排序及顺序查找(c语言实现)
- 算法之直接插入排序
- 白话经典算法系列之二 直接插入排序的三种实现
- 数据结构排序--直接插入和希尔排序
- 常用算法总结之排序(七)---直接插入排序
- (数据结构)排序--直接插入排序
- 算法---直接插入排序法
- 第十五周实践项目1—验证算法(2)直接插入排序
- 数据结构_静态链表直接插入排序