交换排序之冒泡排序

  1. 冒泡排序(Bubble Sort):重复地走访要排序的元素列,依次比较两个相邻元素,如果顺序错误就把它们交换过来,直到没有相邻的元素需要交换,即排序完成。

  2. 算法原理冒泡排序演示

    1. 从元素左侧开始,比较相邻元素。若第一个比第二个大,则交换,否则第二个和第三个比,依次比较执行直到最后一个元素。
    2. 在上面一趟比较完成后,最后一个数值一定是最大的数,最后一个数不参与第二趟的比较。
    3. 在第二趟比较完后,倒数第二份数也应该是数组总的倒数第二大的数,所以第三趟的比较中,最后2个数都不参与比较
    4. 依次类推,每趟比较次数都减1
  3.  排序图标演示:

        

        4.  复杂度:

                平均空间复杂度O(1)

                平均时间复杂度O(n^2)

                最优时间复杂度O(n)—>已排好顺序的情况

                最差时间复杂度O(n^2)-->正好倒叙的情况

        5. 稳定的排序算法:

            冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素  没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,故冒泡排序是一种稳定排序算法。

        6.  总结:

           交换的轮数=元素个数-1

           每一轮交换次数=元素个数-第几轮数

        7.代码实现:  

 class Program

    {
        static void Main(string[] args)
        {
            int[] bubbleArray = { 4,1,6,5,3 };

            Stopwatch sw = new Stopwatch();

            // 开始计时
            sw.Start();
            // 监控冒泡排序方法的运行时间
            BubbleSort(bubbleArray);
            // 停止计时
            sw.Stop();
            Console.WriteLine("冒泡排序方法耗时(毫秒)="+sw.ElapsedMilliseconds);
        }
         private static void BubbleSort(int[] bubbleArray)
        {
            for (int i = 0; i < bubbleArray.Length - 1; i++)// 循环轮数
            {
                for (int j = 0; j < bubbleArray.Length - i - 1; j++)// 每轮交换次数
                {
                    if (bubbleArray[j] > bubbleArray[j + 1])//实现从小到大的排列
                    {
                        int temp = bubbleArray[j];
                        bubbleArray[j] = bubbleArray[j + 1];
                        bubbleArray[j + 1] = temp;
                    }
                    // 排序结果展示
                    ShowSortResult(bubbleArray); 
                }
                Console.WriteLine("");            
            }
        }
        private static void ShowSortResult(int[] bubbleArray)
        {
            for (int k = 0; k < bubbleArray.Length; k++)
            {
                Console.Write(bubbleArray[k] + "  ");
            }
            Console.WriteLine();
        }
    }

       8.   运行结果

      

posted @ 2020-04-01 21:25  南溪风  阅读(219)  评论(0)    收藏  举报