您的位置:首页 > 其它

插入排序法

2016-05-07 20:44 211 查看
插入排序法

          插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置。

          假设:我们输入的是 “5,1,4,2,3”。

          我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1和5,1比5小,所以我们就交换1和5,原来的排列就变成了“1,5,4,2,3”

          接下来,我们看第3个数字有没有在正确的位置。这个数字是4,它的左边数字是5,4比5小,所以我们将4和5交换,排列变成了 “1,4,5,2,3"我们必须继续看4有没有在正确的位置,4的左边是1,1比4小,4就维持不动了。

          再来看第四个数字,这个数字是2,我们将2和它左边的数字相比,都比2大,所以就将2一路往左移动,一直移到2的左边是1,这时候排序变成了 “1,2,4,5,3”

          最后,我们检查第五个数字,这个数字是3,3必须往左移,一直移到3的左边是2为止,所以我们的排列就变成了 “1,2,3,4,5”排序因此完成了。

所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。

          这里使用C#实现了一下,具体代码如下:

<span style="font-size:24px;">namespace ConsoleApplication1
{
class Program
{
//定义一个泛型集合
//要求从大到小排序
static List<int> list = new List<int>() { 72, 54, 59, 30, 31, 78, 2, 77, 82, 9 };
static void Main(string[] args)
{
bubble();
}
//排序
static void bubble()
{
//总共要比较的趟数
for (int i = 1; i < list.Count; i++)
{
//定义一个变量
//用于存放位置为i的那个元素,即寻找合适位置的那个元素
int temp = list[i];
//从这个数的位置开始,依次和它的前一个数进行比较
int j = i;
//每趟中要比较的次数
//依次比较当前位置为j-1的数和temp的大小
//如果当前位置为(j-1)的数比temp小,则把它移到位置为j的地方,然后j-1
//判断j是否大于0
//如果j大于0,继续比较
//如果j小于0,结束比较
//如果当前位置为(j-1)的数比temp大,结束比较
while ((j > 0) && (list[j - 1] < temp))
{
list[j] = list[j - 1];
--j;
}
//temp,应该放到位置为j的地方
list[j] = temp;
PrintList();
}
Console.ReadKey();
}
//输出
static void PrintList()
{
foreach (var item in list )
{
Console.Write(string.Format("{0} ", item));
}
Console.WriteLine();
}
}
}
</span>


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: