1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //插入排序 最坏时间复杂度O(n²) void sortbyinsert ( int a [], int n ) { int i , j , key ; //key用于记录当前要插入的值 for ( i = 1 ; i < n ; i ++ ) //a[0]作为第一个元素,它是有序的,要排序的元素下标应从1到n-1; { key = a [ i ]; j = i - 1 ; //a[0]到a[i-1]已经是有序的了,将a[i]插入到有序数组中 while ( j >= 0 && a[j]>key ) //前一个元素比要插入的元素大,则要一一后移.&&操作符的特性,保证了数组不会越界。两个表达式不应交换位置 { a [ j + 1 ] = a [ j ]; j -- ; //继续比较再前一个元素; } a [ j + 1 ] = key ; //此时的a[j]已经不大于要插入的元素了,所以合适的位置就是a[j+1]; } }