才开始看算法导论,准备边看边做下笔记,文采不好,希望大家谅解。本人小菜一枚,绝对有很多不对之处,希望大家指出。
如果你觉得插入排序总是记不住,你可以借助一个比较形象的例子:比如你可以把它想象成你斗地主的时候,一张一张的拿牌,从右往左插牌,左边都是插好的(类似于已经排好序的)
![]()
伪代码如下:
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++用数组最为参数传递时候,最好还是带一个数组大小的参数;