国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

排序算法 之 冒泡排序

2019-11-10 20:39:38
字體:
來源:轉載
供稿:網友

原文地址http://www.cnblogs.com/liukemng/p/3715925.html

之前看到一個題目,大概是:有一個長度為n的數組,數組內的元素取值范圍為0到m,且不相等,要求元素經過n次移動后使數組有序(即算法的復雜度為O(n))。看到題目后想了快速排序和歸并排序發現并不能滿足題目要求,直到有次看書又看到了桶排序然后豁然開朗,所以決定把這些排序算法再寫一遍,加深記憶。

約定:之后的文章默認待排序的數組大小都為n,排序結果為由小到大,采用c#作為代碼實現。

 

1.基本的冒泡排序算法:

基本思想:

冒泡排序外層共需要對序列進行n-1次遍歷,內層從e[0]到e[n-i](i為外層遍歷的次數)兩兩進行比較,如果e[j-1]>e[j]則進行交換,直到比較e[0]和e[1]后為止,冒泡排序算法的時間復雜度為O(n2);;

代碼實現:

復制代碼
/// <summary>/// 基本的冒泡排序算法/// </summary>/// <param name="intArray"></param>/// <param name="length"></param>public static void BubbleSort(int[] intArray, int length){    int i, j, temp;    for (i = 0; i < length; i++)    {        for (j = 1; j < length - i; j++)        {            if (intArray[j - 1] > intArray[j])            {                temp = intArray[j - 1];                intArray[j - 1] = intArray[j];                intArray[j] = temp;            }        }    }}復制代碼
2.改進的冒泡排序算法一:
上面的排序算法不管某次循環后數組是否已經有序,依然繼續遍歷,這樣的話在對基本有序的數組進行排序是效率顯然是很低的,我們可以設置一個標志位,判斷某次遍歷后元素是否發生了交換,如果沒有發生交換則證明排序完成,結束遍歷從而提高效率 ;
代碼實現:復制代碼
/// <summary>/// 改進后的冒泡排序算法1/// 設立標志判斷某次循環是否發生了交換,如果沒有發生交換則證明排序完成/// </summary>/// <param name="intArray"></param>/// <param name="length"></param>public static void BubbleSort1(int[] intArray, int length){    int i, temp, k = length;    bool flag = true;    while (flag)    {        flag = false;        for (i = 1; i < k; i++)        {            if (intArray[i - 1] > intArray[i])            {                flag = true;                temp = intArray[i - 1];                intArray[i - 1] = intArray[i];                intArray[i] = temp;            }        }        k--;    }}復制代碼

3.改進的冒泡排序算法二:

上面改進后的冒泡排序算法還可以繼續改進,比如在進行第一次遍歷前序列元素排列是這樣的,我們發現當把元素5,4進行交換后,后面的元素已經有序,則我們可以設置一個標志,記錄最后一次交換元素的位置,在以后的遍歷中可以根據設置的標志來縮短要比較元素的下界;

321546789

代碼實現:

復制代碼
/// <summary>/// 改進后的冒泡排序算法2/// 記錄最后一次交換的位置作為排序交換的結束位置/// </summary>/// <param name="intArray"></param>/// <param name="length"></param>public static void BubbleSort2(int[] intArray, int length){    int i, temp, index, k = length;    while (k > 0)    {        index = k;        k = 0;        for (i = 1; i < index; i++)        {            if (intArray[i - 1] > intArray[i])            {                k = i;                temp = intArray[i - 1];                intArray[i - 1] = intArray[i];                intArray[i] = temp;            }        }    }}復制代碼

以上就是冒泡排序算法的內容。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桃源县| 綦江县| 南岸区| 灌阳县| 缙云县| 泽库县| 郧西县| 郓城县| 遵义市| 曲阜市| 秭归县| 文登市| 上栗县| 竹溪县| 奎屯市| 永清县| 信丰县| 那曲县| 巴塘县| 灵台县| 连城县| 横山县| 琼中| 泰宁县| 伊宁县| 上虞市| 彰武县| 东乡县| 鸡东县| 兰溪市| 泊头市| 秦皇岛市| 拜城县| 白水县| 什邡市| 民勤县| 都兰县| 泰来县| 大田县| 济宁市| 黄浦区|