zoukankan      html  css  js  c++  java
  • 数据结构--冒泡算法

    
    

    一:冒泡的基本介绍

    二:实际应用

     static void Main(string[] args)
            {
                int[] arr = {3,9,-1,10,20 };
                for (int i = 0; i < arr.Length - 1; i++)
                {
                    for (int j = 0; j < arr.Length - 1 - i; j++)
                    {
                        if (arr[i] < arr[j])
                        {
                            int temp = arr[i];
                            arr[i] = arr[j];
                            arr[j] = temp;
                        }
                    }
                    Console.Write("第" + (i + 1) + "趟排序后的数组:");
                    print(arr);
                }
                Console.WriteLine("最后的结果:");
                print(arr);
     
            }
     
            public static void print(int[] arr)
            {
                for (int i = 0; i < arr.Length; i++)
                {
                    Console.Write(arr[i] + " ");
                }
                Console.WriteLine("");
            }
     

     

    三:优化冒泡排序

    引入一个开关,如果此次遍历没有交换值,说明顺序是正确,后面没必要重新多次遍历。

              static void Main(string[] args)
            {
                int[] arr = {3,9,-1,10,20 };
                bool flag = false;//标识变量,表示是否进行交换
            for (int i = 0; i < arr.Length - 1; i++)
            {
                for (int j = 0; j < arr.Length - 1 - i; j++)
                {
                        if (arr[j] > arr[j+1])
                        {
                            flag = true;
                            int temp = arr[j];
                            arr[j] = arr[j+1];
                            arr[j+1] = temp;
                        }
                }
                Console.Write("第" + (i + 1) + "趟排序后的数组:");
                print(arr);
     
                if (flag)//在一趟排序中,依次交换都没有发生过
                {
                    flag = false;//重置flag,进行下次判断
                }
                else
                {
                    break;
                }
            }
            Console.WriteLine("最后的结果:");
            print(arr);
     
        }
     
        public static void print(int[] arr)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i] + " ");
            }
            Console.WriteLine("");
        }

    想比较上面的写法,减少了一次遍历。

    四:比较排序的效率

     

                 int len = 10;//修改数据量
                int[] arrs = new int[len];
                for (int i = 0; i < len; i++)
                {
                    Random random = new Random();
                    int a = (int)random.Next(0, len);
                    arrs[i] = a;
                    Thread.Sleep(1);
                }
                Console.WriteLine("排序前的时间是"+DateTime.Now.ToString("HH:mm:ss fff"));
                bubbleSort(arrs);
                Console.WriteLine("排序后的时间是" + DateTime.Now.ToString("HH:mm:ss fff"));
                 
                 
        public static void bubbleSort(int[] arr)
              {
                bool flag = false;//标识变量,表示是否进行交换
                for (int i = 0; i < arr.Length - 1; i++)
                {
                    for (int j = 0; j < arr.Length - 1 - i; j++)
                    {
                        if (arr[j] > arr[j + 1])
                        {
                            flag = true;
                            int temp = arr[j];
                            arr[j] = arr[j + 1];
                            arr[j + 1] = temp;
                        }
                    }
                  // Console.Write("第" + (i + 1) + "趟排序后的数组:");
                  // print(arr);
     
                    if (flag)//在一趟排序中,依次交换都没有发生过
                    {
                        flag = false;//重置flag,进行下次判断
                    }
                    else
                    {
                        break;
                    }
                }
            }

    10个数据冒泡排序比较1000个数据:

    当数据量越大,所需要的时间越长!

    五:源码地址

    Github冒泡源码

  • 相关阅读:
    com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: INSTALL_FAILED_UPDATE_INCOMPATIBLE:
    vue 使用video.js循环
    微信小程序使用iconfont
    小程序使用可滑动的tab
    vue cli2引入iconfont
    Couldn't find preset "es2015" relative to directory
    Electron桌面应用框架的使用,结合react项目
    如何用Linux重现《黑客帝国》中的经典界面?
    iOS----------证书的制作
    iOS----------charles如何设置本地映射、和取消本地映射
  • 原文地址:https://www.cnblogs.com/2828sea/p/11925923.html
Copyright © 2011-2022 走看看