关于插入排序的实现
插入排序是排序算法中一个常见的算法,个人觉得插入排序和冒泡排序有很大的相同之处。先看两段代码:
1、来自http://www.cnblogs.com/xkfz007/archive/2012/07/01/2572017.html
void insert_sort(int a[],int n) { _FUNC; for(int i=1;i<n;i++) { int t=a[i]; int j; for(j=i-1;j>=0&&a[j]>t;j--) { a[j+1]=a[j]; } a[j+1]=t; print(a,n); } }
2、来源已经忘了
#include <stdio.h> #include <stdlib.h> #include <iostream> void swap(int *p1, int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; } void insertSort(int *a,int len) { int i,j; for(i=0;i<len-1;i++) { for(j=i+1;j>=1;j--) { if(a[j]<a[j-1]) swap(&a[j],&a[j-1]); } } } int main() { const int LEN=10; int a[LEN]={1,45,41,71,19,15,12,10,21,45}; insertSort(a,LEN); for(int i:a){ std::cout<< i << " "; } std::cout<<std::endl; }
第一段和第二段代码的思想差不多,都是不断的将后一个元素加入到前面已经排序好的数值中。其实说来,第二段代码还是比较清楚的,和冒泡排序比较像似。冒泡排序是下往上交换,而插入排序是每次把下一个元素泡到已经排好的序列当中。