1. 程式人生 > >C# 冒泡排序

C# 冒泡排序

img [] 有一個 image 整數 循環 下標 mage 位置

  話說都工作一年多了 連一個冒泡排序也寫不出來是不是太尬了 要以後面試的時候讓我寫一個冒泡排序我寫不出來 那我就只能在家裏吃雞了。好了言歸正傳 馬上動手 百度冒泡排序 翻出了這篇文章

  已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[2]與a[3]的值,若a[2]大於a[3]則交換兩者的值,否則不變。再比較a[3]與a[4],以此類推,最後比較a[n-1]與a[n]的值。這樣處理一輪後,a[n]的值一定是這組數據中最大的。再對a[1]~a[n-1]以相同方法處理一輪,則a[n-1]的值一定是a[1]~a[n-1]中最大的。再對a[1]~a[n-2]以相同方法處理一輪,以此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以升序排列了。降序排列與升序排列相類似,若a[1]小於a[2]則交換兩者的值,否則不變,後面以此類推。 總的來講,每一輪排序後最大(或最小)的數將移動到數據序列的最後,理論上總共要進行n(n-1)/2次交換。

代碼如下:

     /// <summary>
        /// 冒泡排序
        /// </summary>
        /// <param name="arry">要排序的整數數組</param>
        public static void BubbleSort(this int[] arry)
        {
            for (int i = 0; i < arry.Length; i++)
            {
                for (int j = 0; j < arry.Length - 1
- i; j++) { //比較相鄰的兩個元素,如果前面的比後面的大,則交換位置 if (arry[j] > arry[j + 1]) { int temp = arry[j + 1]; arry[j + 1] = arry[j]; arry[j] = temp; } } } }

內容引用:http://blog.csdn.net/sniper007/article/details/53080131

我:%¥%¥%¥#@#%#@#@&

對於我們這些理解能力差的人來說這TM堪比天書啊。算了吧看代碼

有點雲裏霧裏的感覺 算了加註釋一步一步的來吧

技術分享圖片技術分享圖片

看了這段代碼後我有一個問題:

76 和 66 交換後 為什麽 98 又和44交換

看了一會兒代碼終於搞明白了

因為 交換後數組的改變了

arr[j + 1] = arr[j];
arr[j] = temp;

每次交換後數組也不相同了(我TM真想給自己兩巴掌 這麽簡單的東西居然思考了那麽久)

鼓動了半天 終於有點明白了

我的理解:

冒泡排序 第一次套嵌循環 找出數字最大的排到最後面
例如 int[] arr = { 23, 44, 76,66, 98, 11, 3, 9, 7 };
第一次套嵌循環 循環3次後 76 > 66 所以 76和66換順序 現在的數組為
{ 23, 44, 66,76, 98, 11, 3, 9, 7 }
第四次循環 76<98 第五次循環 98 > 11 所以 98和11換順序 現在的數組為
{ 23, 44, 66,76, 11, 98, 3, 9, 7 }
第六次套嵌循環
由於 98和11換順序 所以 98現在的下標就是 第五次11的下標
所以還是 98 和 3比較 依次類推

由於LZ的表達能力實在是太差 只能這樣來解釋LZ自己理解的東西 如果有誤 還望各位大佬指點

C# 冒泡排序