例子:用插入排序实现”9,8,4,65,76,97,13“的升序
#include<stdio.h>
void InsertSort(int a[],int n){
int i,j,temp;
for(i=1;i<n;i++){
if(a[i]<a[i-1]) {
temp=a[i];
for(j=i-1;j>=0;j--){
if(a[j]>temp) a[j+1]=a[j];
else break;
}
a[j+1]=temp;
}
}
}
int main()
{
int n=7;
int a[]={9,8,4,65,76,97,13};
InsertSort(a,n);
for(int i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
将该数字序列存入数组a[n]中,元素就排成了一行,将a[i],(0<i<n)当作是一个标记点;a[i]左边是已经排好序的数组,看看a[i]是不是也能续到左边的升序中,也就是比较a[i]与a[i-1]的大小,续的上就很完美,否则,咱们就来一个for循环,开始遍历左边这个数组,找到合适的位置将a[i]插进去,这里的精髓就是这段代码:
if(a[j]>temp) a[j+1]=a[j];
else break;
它用来实现:将左边部分中大于a[i]的元素右移。主体思路就是如此。
其他要注意的就是循环的边界,以及跳出循环的条件。