天天一個算法:冒泡排序

說明:冒泡算法是最基礎的算法之一,其做用是將一組無序的元素排列爲按照必定順序(升序或者降序)排列的有序列。算法

原理:設置兩層for嵌套循環,外層循環爲限定循環,內層循環將下標小於外層循環限定長度的兩個相鄰元素進行比較,若是兩個元素的大小順序爲逆序,則交換兩個元素。不斷重複以上動做,知道外層循環的限定長度等於要比較的序列的總長度爲止。到此,整個序列將按照升序或者降序的順序排列。數組

時間複雜度:冒泡排序由內外兩層循環組成。內循環從前向後一次比較各對相鄰元素的大小,若有必要則交換逆序的元素對。故在每一輪內循環中,須要掃描和比較n-1對元素,至多須要交換n-1對元素。不管元素的比較仍是元素的交換都屬於基本操做,故每一輪內循環至多須要執行2(n-1)次基本操做。外循環至多執行n-1輪。所以,總共須要執行的基本操做不會超過2(n-1)^2次。則該算法的時間複雜度則有T(n)=O(2(n-1)^2)。則該算法的時間複雜度爲O(n^2)。code

static void Main(string[] args)
        {
            //任意定義一個數字型數組
            int[] array = new int[] {12,34,5,78,23,90,1,23,51,76,64,87,43,25,13};
            //升序冒泡排序
            for (int i = 0; i < array.Length; i++) {
                for (int j = 0; j < i; j++) {
                    if (array[i] < array[j]) {
                        int temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                }
            }
            for (int i = 0; i < array.Length; i++) {
                Console.Write(array[i]+"\t");
                if (i % 5 == 0) {
                    Console.Write("\n");
                }
            }
            Console.ReadKey();
        }
相關文章
相關標籤/搜索