标签:
才开始看算法导论,准备边看边做下笔记,文采不好,希望大家谅解。本人小菜一枚,绝对有很多不对之处,希望大家指出。
如果你觉得插入排序总是记不住,你可以借助一个比较形象的例子:比如你可以把它想象成你斗地主的时候,一张一张的拿牌,从右往左插牌,左边都是插好的(类似于已经排好序的)
伪代码如下:
INSERTION_SORT(A)
for j=1 to A.length
key=A[j]
i=j-1;
while i>=0&&A[i]>key
A[i+1]=A[i]
i-=1
A[i+1]=key
程序实现如下;
1 #include <iostream> 2 using namespace std; 3 4 void insertSort(int a[],int n){ 5 //int n=sizeof(a)/sizeof(int); 6 // cout<<n; 7 for(int i=1;i<n;i++){ 8 int j=i-1; 9 int temp=a[i]; 10 while(j>=0&&a[j]>temp){// a[j]>temp 是从小到大排序。如果改成a[j]<temp则是从大到小排序 11 a[j+1]=a[j]; 12 j-=1; 13 } 14 a[j+1]=temp; 15 } 16 } 17 18 int main(){ 19 int a[]={5,2,1,7,3,4,6}; 20 int n=sizeof(a)/sizeof(int); 21 insertSort(a,n); 22 for(int i=0;i<n;i++){ 23 cout<<a[i]<<" "; 24 } 25 return 0; 26 }
注意!!!
最开始我声明的函数为
void insertSort(int a[]){
5 //int n=sizeof(a)/sizeof(int);
.........
总是出不来结果,原来C++数组作为参数传递虽然是地址传递,但是最开始只传递了第一个元素的地址。则通过int n=sizeof(a)/sizeof(int) 求出来 n始终是1;所以C++用数组最为参数传递时候,最好还是带一个数组大小的参数;
标签:
原文地址:http://www.cnblogs.com/small-snail/p/4457137.html