基本原理概括为:“从未排序的队列中取一个值插入到已排好序的队列中的恰当位置!”
至于其中的所谓的队列就是存放带排序数组的前半部分和后半部分了,前面的是我们已经排好序的,后边的是待排序的部分;每次通过数组下标的移动来取放数据;
代码:
#include <cstdlib> #include <iostream> using namespace std; int main() { int arr[10]={3,4,1,9,7,0,6,5,8,2}; cout<<"排序前的数组的值为:"; for(int b=0;b<10;b++) { cout<<arr[b]<<" "; } cout<<endl; int key; for(int i=1;i<10;i++) { key=arr[i]; int j=i-1; for(;;) { if(arr[j]>key&&j>=0) // 一定要把J的范围限制在大于等于0,如果没有等于0,则会出现错误! { arr[j+1]=arr[j]; j=j-1; //cout<<"j="<<j<<endl; } else break; //如果不满足条件则退出,说明此时已经找到了key要插入的位置; } arr[j+1]=key; } cout<<"排序后的数组的值为:"; for(int a=0;a<10;a++) { cout<<arr[a]<<" "; } system("PAUSE"); return 0; }
当然把上边的for循环改成while循环也许会更好;在这里只记录一下大致的思想!