算法思路:
简单插入排序的思路是把一个数列分为两部分,左边是有序列,右边是无序列,每次将无序列的第一个插入到有序列的正当位置,使有序列增加一个同时无序列减少一个,当无序列的个数为零时,整个数列就排完序了。
例如将 5,4,2,3,1 调整为升序时,开始时第一个数在有序列中,第二个到第四个数在无序列中。
我们把无序列的第一个数,也就是数字4,插入到有序列中,4比5小,所以插到5前面,数列调整为4,5,2,3,1。这样数列的有序列(即4,5)增加了一个长度,无序列(即2,3,1)减少了一个长度。接着,我们重复前面的过程,将无序列的数(2,3,1)依次插入到有序列中的正确位置,整个数列就递增了。
整个过程是5,4,2,3,1→4,5,2,3,1→2,4,5,3,1→2,3,4,5,1→1,2,3,4,5
代码:using System;
namespace Bubble_sort
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("请输入您要排序的整型数列的长度: ");
int n = int.Parse (Console.ReadLine ());
int[] tobeSort = new int[n];
Console.WriteLine ("请输入{0}个待排序的整数(输入一个敲一次回车): ",n);
for (int i = 0; i < n; i++)
{
tobeSort [i] = int.Parse (Console.ReadLine ());
}
Console.Write ("排序前: ");
print (tobeSort);
InsertSort (tobeSort);
Console.Write ("排序后: ");
print (tobeSort);
}
public static void InsertSort(int[] arr)
{
//数组下标0至i-1的元素已经递增有序
for (int i = 1; i < arr.Length; i++) {
if (arr [i] < arr [i - 1]) { //这个if判断当前的数是否需要插到前面去
int temp = arr [i]; //用temp记下当前下标为i的数,因为我们下一步就要做移动,会覆盖掉它
int j;
//将有序列自后往前后移一个位置,直到空出当前无序列第一个(也就是i下标的数)该插入的位置
for (j = i-1; j >= 0 && temp<arr[j] ; j--) {
arr [j+1] = arr [j];
}
arr [j + 1] = temp; //将数插入到正确的位置
}
Console.Write ("第{0}次将无序列的第一个插入到有序列中的结果:",i);
print (arr);
}
}
public static void print(int[] arr){
foreach (int num in arr) {
Console.Write ("{0} ",num);
}
Console.WriteLine ();
}
}
}
using System;
namespace Bubble_sort
{
class MainClass
{
public static void Main (string[] args)
{
Console.Write ("请输入您要排序的整型数列的长度: ");
int n = int.Parse (Console.ReadLine ());
int[] tobeSort = new int[n];
Console.WriteLine ("请输入{0}个待排序的整数(输入一个敲一次回车): ",n);
for (int i = 0; i < n; i++)
{
tobeSort [i] = int.Parse (Console.ReadLine ());
}
Console.Write ("排序前: ");
print (tobeSort);
InsertSort (tobeSort);
Console.Write ("排序后: ");
print (tobeSort);
}
public static void InsertSort(int[] arr)
{
//数组下标0至i-1的元素已经递增有序
for (int i = 1; i < arr.Length; i++) {
if (arr [i] < arr [i - 1]) { //这个if判断当前的数是否需要插到前面去
int temp = arr [i]; //用temp记下当前下标为i的数,因为我们下一步就要做移动,会覆盖掉它
int j;
//将有序列自后往前后移一个位置,直到空出当前无序列第一个(也就是i下标的数)该插入的位置
for (j = i-1; j >= 0 && temp<arr[j] ; j--) {
arr [j+1] = arr [j];
}
arr [j + 1] = temp; //将数插入到正确的位置
}
Console.Write ("第{0}次将无序列的第一个插入到有序列中的结果:",i);
print (arr);
}
}
public static void print(int[] arr){
foreach (int num in arr) {
Console.Write ("{0} ",num);
}
Console.WriteLine ();
}
}
}