首先声明该代码来自Thomas H.Cormen、Charles E.Leiserson等著作的《算法导论》,有兴趣的同学可以去网上搜一下。进入正题:
首先 直接插入排序的原理为,从待排序数据的第二位开始,跟前面已排序的数据进行比较(默认第一个数据为已排序状态),如果前面数据比他大,那么该数据取代前面数据的位置,前面数据后移一位,如果前面的数据没有比他大的,那么就把该数据放在该位置,例排序1,3,2,(1)对3来说,1比3小,则1,3为已排序状态,(2)对2来说,2<3,那么将2往前移一位,3向后移。再比较2和1,由于2>1,则2的位置保持不变,此时1,2,3即为已排序状态。
算法伪代码如下:
Insertion_Sort(A)
for i=2 to A.length
key=A[i] //标志位,待排序数据
j=i-1;
while j>0 and A[j]>key
A[j+1]=A[j]
j--;
A{j+1]=key
C#代码如下:
public class Insertion_Sort
{
public static void Main(string[] args)
{
int[] array = new int[] { 1, 5, 26, 4, 62, 42, 354 };
for (int i =2 ; i < array.Length; i++)
{
int key = array[i];
int j = i - 1;
while (j > 0 && array[j] > key)
{
array[j + 1] = array[j];
j--;
array[j + 1] = key;
}
}
foreach (int item in array)
{
Console.Write(item+" ");
}
Console.ReadKey();
}
}
}
java代码如下:
public class InsertionSort {
public static void main(String[] args) {
int[] array = new int[] { 1, 5, 26, 4, 62, 42, 354 };
for (int i = 2; i < array.length; i++) {
int j=i-1;
int key=array[i];
while(j>0&&array[j]>key) {
array[j+1]=array[j];
j--;
array[j+1]=key;
}
}
for (int i : array) {
System.out.print(i+" ");
}
}
}
如有不对,还望各位不吝赐教,谢谢大家