插入排序(Insertion Sort)
2014-03-26 15:54
357 查看
插入排序(Insertion Sort)
是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法描述
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置后
重复步骤2~5
示例代码
#include<iostream> using namespace std; int data[8]={6,5,3,1,8,7,2,4}; int myInsertSort(int ds[],int length){ //从第二个元素开始扫描 for(int i=1;i<length;i++){ //如果当前元素大于已排序元素,跳出循环,从下一元素开始执行 if(ds[i]>ds[i-1]) continue; //保存当前元素,将已排序的最后一个元素后移(已比较过) int temp=ds[i]; ds[i]=ds[i-1]; //从已排序的倒数第二个元素开始(如果有的话) int j=i-2; for(;j>=0;j--) //如果当前元素大于要插入元素,当前元素向后移,否则跳出 if(ds[j]>temp) ds[j+1]=ds[j]; else break; //插入待排序元素 ds[j+1]=temp; } return 0; } int main(){ myInsertSort(data,8); for(int i=0;i<8;i++) cout<<data[i]<<endl; getchar(); return 0; }
相关文章推荐
- 经典排序算法 – 插入排序Insertion sort
- Insertion Sort List——链表的插入排序
- Aizu ALDS1_1_A Insertion Sort(插入排序)
- LeetCode 147 Insertion Sort List(链表插入排序)
- 排序算法---插入排序(Insertion Sort)
- 插入排序(insertion_sort)详解
- 从VB来看-InsertionSort(VB插入排序)
- 经典排序算法 – 插入排序Insertion sort
- 【DS】排序算法之插入排序(Insertion Sort)
- 【算法导论学习-001】插入排序(InsertionSort)
- Insertion Sort List(单链表插入排序)
- InsertionSort(插入排序)
- 插入排序 (Insertion Sort)
- 插入排序(insertion sort)(二)
- PAT 1098. Insertion or Heap Sort (25) 堆排序和插入排序
- 173. 链表插入排序 (insertion-sort-list)(c++)----lintcode面试题之链表
- 插入排序(InsertionSort)
- 插入排序(insertion sort)算法实现
- 插入排序 insertion_sort
- insertion sort 插入排序