• 冒泡排序算法


    冒泡算法,顾名思义,就是这个算法的奥义是冒泡,把小泡泡在下,大泡泡在上。先上例子:

    假设有这么一个数组,里面有十个无序排列的数字,[10, 1, 18, 30, 23, 12, 7, 5, 18, 17],我们需要做的就是利用冒泡给他排序。

    第一次循环,泡泡A出发,来到了下标为0的位置,发现了数字10,带着10往前接着出发,到了下标为1的位置时,发现了数字1。它比较了一下,知道10大于1,便把10留下了,把1放到了前一格。这个时候的数组是 [1, 10, 18, 30, 23, 12, 7, 5, 18, 17]

    泡泡A接着往前走,发现了18,便扔下了10,捡起了18,然后扔下了18捡起了30,就这样,泡泡A拿着最大的30走到了最右边,看到没有路了,它便停了下来。这个时候的数组是 [1, 10, 18, 23, 12, 7, 5, 18, 17, 30]

    第二次循环,泡泡B出发了,他像泡泡A一样挑挑拣拣的往前走,结果它拿着剩余数字中最大的23走到了泡泡A的前面,它知道泡泡A的数字肯定比他的大,便不再往前走了。这个时候的数组是 [1, 10, 18, 12, 7, 5, 18, 17, 2330]

    第三次循环,泡泡C出发,然后是泡泡D。。。

    直到最后一个泡泡,他刚踏上了旅程,就看到了后面的泡泡,知道自己一步都走不下去了。泡泡便冒完了,这个时候的数组是[1, 5, 7, 10, 12, 17, 18, 18, 23, 30];

    我们的泡泡历险记至此便落下了帷幕,也给无序的数组拍了下序。利用的就是泡泡的贪婪,它们都想带走最大的数字,所以最大的数字都走到了当时的最后。

    反过来如果想让最小的在最后面,只需要清楚泡泡中的孔融家族便可,他们都有着谦让的美德,会把最小的留给自己。

    最后插一段代码:

    int[] intArray = { 2,399,2,4,5,23,56,34,67,45 };
    int tempInt;
    int index;
    for (int i = 0; i < intArray.Length - 1; i++)
    {
        index = 0;
        for (int j = 0; j < intArray.Length - i-1; j++)
        {
            if (intArray[index] > intArray[index + 1])
            {
                tempInt = intArray[index];
                intArray[index] = intArray[index + 1];
                intArray[index + 1] = tempInt;
            }
            index++;
        }
    }

    再插一个递归的实现方式:

    private void Button1_Click(object sender, EventArgs e)
    {
        int[] intArray = { 2, 399, 2, 4, 5, 23, 56, 34, 67, 45 };
        for (int i = 0; i < intArray.Length-1; i++)
        {
            GetMaxNum(intArray,i,0);
        }
        MessageBox.Show(string.Join(",", intArray));
    }
    public void GetMaxNum(int[] intArray,int i,int j)
    {
        if (intArray[j]>intArray[j+1])
        {
            int tempInt = intArray[j];
            intArray[j] = intArray[j + 1];
            intArray[j + 1] = tempInt;
        }
        if (i < intArray.Length-2) { GetMaxNum(intArray,i+1,j+1); }
    }
  • 相关阅读:
    2018.7.12训练赛 -K
    winter 2018 02 01 关于模运算的一道题
    debug(实验)
    problem-1003(恢复一下)
    hd acm1466
    hd acm2045
    hd acm 1297
    hd acm1005
    hd acm1425
    概率趣题:三个犯人
  • 原文地址:https://www.cnblogs.com/liangshibo/p/12207116.html
Copyright © 2020-2023  润新知