天天看點

C#之冒泡排序

以前在學校的時候看過冒泡排序,看的時候挺明白的,但是自己寫的時候就寫不出來

冒泡排序從字面意思了解:應該是這樣的,按照順序從最下面一個(數組索引最大)上升到第一個:

是以代碼是這樣的:

//冒泡排序
        public void BubbleSort(double[] data)
        {
            for (int i = 0; i < data.Length - 1; i++)
            {
                for (int j = data.Length - 1; j >i; j--)
                {
                    if (data[j] > data[j - 1])
                    {
                        data[j] = data[j] + data[j - 1];
                        data[j - 1] = data[j] - data[j - 1];
                        data[j] = data[j] - data[j - 1];
                    }
                }
            }
        }      

當然如果你喜歡最下底下的元素對應最小索引,那麼代碼是這樣的:

//冒泡排序
        public void BubbleSort(double[] data)
        {
            for (int i = 0; i < data.Length-1; i++)
            {
                for (int j = 0; j < data.Length-1-i; j++)
                {
                    if(data[j]>data[j+1])
                    {
                        data[j] = data[j] + data[j + 1];
                        data[j + 1] = data[j] - data[j + 1];
                        data[j] = data[j] - data[j + 1];
                    }
                }
            }
        }      

這樣也可以實作

public void PopSort(int[] list)
    {
      int i, j, temp;  //先定義一下要用的變量
      for (i = 0; i < list.Length - 1; i++)
      {
        for (j = i + 1; j < list.Length; j++)
        {
          if (list[i] > list[j]) //如果第二個小于第一個數
          {
            //交換兩個數的位置,在這裡你也可以單獨寫一個交換方法,在此調用就行了
            temp = list[i]; //把大的數放在一個臨時存儲位置
            list[i] = list[j]; //然後把小的數賦給前一個,保證每趟排序前面的最小
            list[j] = temp; //然後把臨時位置的那個大數賦給後一個
          }
        }
      }
    }