基本思想
对于我来说,插入排序就是一句话:插入排序是将待排序元素插入到一个有序的序列中。
实现步骤
1.从第一个元素开始,该元素可以认为已经被排序;
2.取出下一个元素,在已经排序的元素序列中从后向前扫描;
3.如果该元素(已排序)大于新元素,将该元素移到下一位置;
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
5.将新元素插入到该位置后;
6.重复步骤2~5。
代码实现:
#include<stdio.h>
void print(int arr[],int length)
{
int i;
for(i=0;i<length;i++)
{
printf("%5d",arr[i]);
}
printf("\n");
}
void InsertSort(int arr[],int length)
{
int i,j,x;
for(i=1;i<length;i++)
{
if(arr[i] < arr[i-1])
{
j=i-1;
x=arr[i];
while(j >= 0 && x < arr[j])
{
arr[j+1]=arr[j];
j--;
}
arr[j+1]=x;
}
}
}
int main(void)
{
int i,length;
int arr[]={1,3,2,5,4,9,6,7,8};
length=sizeof(arr)/sizeof(arr[0]); //数组占内存总空间,除以单个元素占内存空间大小
puts("排序后的数组为:\n");
print(arr,length);
InsertSort(arr,length);
puts("排序后的数组为:\n");
print(arr,length);
return 0;
}