class InsertSort { public bool Sort(int[] datas) { if (datas.Length < 1) return false; for (int i = 1; i < datas.Length; i++)//默认0为已经有序 { int temp = datas[i];//当前需要插入的元素 for (int j = 0; j < i; j++)//在有序段中寻找位置 { if (temp < datas[j])//寻找到 { for (int k = i; k > j; k--) { datas[k] = datas[k - 1];//向后面腾出位置 } datas[j] = temp;//坐上宝座 break; } } } return true; } }
插入排序就是将数组分为了左右两个集合,一个是有序的,一个是无序的,从无序中每次取一个元素,插入到有序的集合中,并保持有序。算法的效率是O(n2),不适合大量元素的排序。
测试代码:
static void TestInsertSort() { int[] datas = { 5, 6, 9, 1, 100,3, 7, 0, 2, 4 }; InsertSort insertSort = new InsertSort(); insertSort.Sort(datas); foreach (var data in datas) { Console.Write(data + " ");//0 1 2 3 4 5 6 7 9 100 } }