插入排序:
1 2 3 4 5 6
理解:
插入排序
(1)从1,2两个元素开始,比较1,2元素大小,小的则交换到一个位置
(2)2,3两个元素,比较两个元素大小,若2小于3则不变,否则2元素向后一位;然后,在比较1和3元素,若1小,将3插入到2位置,若1大于3则,3插入到1位置,1,2两个元素向后移一位。同理依次比较。
经过我自己理解一遍后,认知和思考就更加清楚。其实是个很舒服的过程。
代码:
int A[maxn],n; //n个元素个数,数组下标为1~n
void insertSort(){
for(int i=2; i<=n; i++){ //进行n-1趟排序
int temp = A[i],j = i; //temp临时存放A[i],j从i开始往前枚举
while(j>1&&temp<A[j-1]) //只要temp小于前一个元素A[j-1]
{
A[j] = A[j-1]; //把A[j-1]后移一位至A[j]
j--;
}
A[j] = temp; //插入位置为j
}
}
很有意思的算法,挺喜欢这样的思考方式。我要将这样的想法铭记。