C#语法基础13_插入排序Insertion Sort Algorithm
C#语法基础13_插入排序Insertion Sort Algorithm
理解
以数组Arr[10] = {9,8,2,5,1,3,6,4}的升序排序为例帮助理解
从第二个元素开始,第i个元素(i>=2)与第i-1个元素比较交换建立彼此间的有序关系,同样的第i-1个元素和第i-2个元素比较交换建立彼此间的有序关系,直到数组的第2个元素和第一个元素进行交换,结束一轮的排序。下一轮以<上一轮开始元素的下一个元素>和<上一轮的开始元素>比较为开始。
显然的,
未排序前:{9,7,8,2,5,1,3,6,4}
第一轮,9个7比较,交换为{7,9,8,2,5,1,3,6,4}
第二轮,9和8比较,交换为{7,8,9,2,5,1,3,6,4}
7和8比较,不交换
第三轮,2和9比较,交换为{7,8,2,9,5,1,3,6,4}
8和2比较,交换为{7,2,8,9,5,1,3,6,4}
7个2比较,交换为{2,7,8,9,5,1,3,6,4}
第四轮,9和5比较,交换为{2,7,8,5,9,1,3,6,4}
8和5比较,交换为{2,7,5,8,9,1,3,6,4}
7和5比较,交换为{2,5,7,8,9,1,3,6,4}
2和5比较,不叫交换
。。。
。。。
。。。
经过8轮(Arr.Length-1)交换,得到升序数组{1,2,3,4,5,6,7,8,9}
例子(代码实现)
myarray = { 31, 15, 41, 28, 87, 55, 22, 46, 32 }的升序排序例子
class Program
{
static void Main(string[] args)
{
int[] myarray = { 31, 15, 41, 28, 87, 55, 22, 46, 32 };
Console.Write("\t");
Printmyarray(myarray, 0, -1);
int temp;
for (int i = 1; i <= myarray.Length-1; i++) // i = 1表示从第二个数字开始,myarray.Length-1是myarry最后一项的索引值
{
for (int j = i; j>=1; j--)
{
if (myarray[j] < myarray[j-1])
{
temp = myarray[j-1];
myarray[j-1] = myarray[j];
myarray[j] = temp;
}
}
Printmyarray(myarray, 1, i);
}
}
// 打印数组内容的一个方法
static void Printmyarray(int[] myarray, int flag, int i)
{
if (flag == 1)
{
Console.Write("Pass {0}: ", i);
}
for (int k = 0; k <= myarray.Length - 1; k++)
{
Console.Write(myarray[k] + " ");
}
Console.Write("\n");
}
}
运行结果:
moyutime:本文仅是学习心得,观点仅供参考,祝愿读者学习途中快乐且不断有所收获。