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

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

冒泡,選擇,插入排序算法總結(jié)

2019-11-09 18:47:23
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一.冒泡排序

原理:比較兩個(gè)相鄰的元素,將值大的元素交換至右端。

思路:依次比較相鄰的兩個(gè)數(shù),將小數(shù)放在前面,大數(shù)放在后面。

即在第一趟:首先比較第1個(gè)和第2個(gè)數(shù),將小數(shù)放前,大數(shù)放后。

然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個(gè)數(shù),將小數(shù)放前,大數(shù)放后。

重復(fù)第一趟步驟,直至全部排序完成。

舉例說(shuō)明:要排序數(shù)組:int[] arr={6,3,8,2,9,1};  

第一趟排序:

第一次排序:6和3比較,6大于3,交換位置:  3  6  8  2  9  1

第二次排序:6和8比較,6小于8,不交換位置:3  6  8  2  9  1

第三次排序:8和2比較,8大于2,交換位置:  3  6  2  8  9  1

第四次排序:8和9比較,8小于9,不交換位置:3  6  2  8  9  1

第五次排序:9和1比較:9大于1,交換位置:  3  6  2  8  1  9

第一趟總共進(jìn)行了5次比較, 排序結(jié)果:      3  6  2  8  1  9

算法實(shí)現(xiàn):

public static int[] bubbleSort3(int []data) {  

    int temp;  

    for (int i = 0; i < data.length; i++) {  

        for (int j = 0; j < data.length-i-1; j++) {  

            if (data[j]>data[j+1]) {  

                temp=data[j];  

                data[j]=data[j+1];  

                data[j+1]=temp;

            }  

        }  

    }

    return data;

}  

 

二.快速排序

原理:對(duì)于給定的一組記錄,選擇一個(gè)基準(zhǔn)元素,通常選擇第一個(gè)元素或者最后一個(gè)元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準(zhǔn)元素小,一部分大于等于基準(zhǔn)元素,此時(shí)基準(zhǔn)元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序劃分的兩部分,直到序列中的所有記錄均有序?yàn)橹埂?/strong>

舉例說(shuō)明:

一趟排序的過程:

 

算法如下:

public void fastSort(int[] a,int low,int high){

         int start = low;

         int end = high;

         int key = a[low];

         while(end>start){

             //從后往前比較

             while(end>start&&a[end]>=key)  //如果沒有比關(guān)鍵值小的,比較下一個(gè),直到有比關(guān)鍵值小的交換位置,然后又從前往后比較

                 end--;

             if(a[end]<=key){

                 int temp = a[end];

                 a[end] = a[start];

                 a[start] = temp;

             }

             //從前往后比較

             while(end>start&&a[start]<=key)//如果沒有比關(guān)鍵值大的,比較下一個(gè),直到有比關(guān)鍵值大的交換位置

                start++;

             if(a[start]>=key){

                 int temp = a[start];

                 a[start] = a[end];

                 a[end] = temp;

             }

         //此時(shí)第一次循環(huán)比較結(jié)束,關(guān)鍵值的位置已經(jīng)確定了。左邊的值都比關(guān)鍵值小,右邊的值都比關(guān)鍵值大,但是兩邊的順序還有可能是不一樣的,進(jìn)行下面的遞歸調(diào)用

         }

         //遞歸

         if(start>low) sort(a,low,start-1);//左邊序列。第一個(gè)索引位置到關(guān)鍵值索引-1

         if(end<high) sort(a,end+1,high);//右邊序列。從關(guān)鍵值索引+1到最后一個(gè)

     }

}

三.插入排序

原理:插入排序就是把當(dāng)前待排序的元素插入到一個(gè)已經(jīng)排好序的列表里面

算法如下:

public static void insertSort(int[] array) {      if (array == null || array.length < 2) {          return;      }      for (int i = 1; i < array.length; i++) {          int currentValue = array[i];          int position = i;          for (int j = i - 1; j >= 0; j--) {              if (array[j] > currentValue) {                  array[j + 1] = array[j];                  position -= 1;              } else {                  break;              }          }          array[position] = currentValue;      }  }


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 外汇| 县级市| 合川市| 沧州市| 和田县| 伊宁市| 康定县| 阳西县| 千阳县| 盐亭县| 建瓯市| 柳河县| 云南省| 化隆| 搜索| 宿州市| 贵德县| 揭阳市| 宣化县| 肥西县| 灵山县| 阜新| 莫力| 晋州市| 江安县| 仙桃市| 泗水县| 武宁县| 神池县| 苏尼特左旗| 密山市| 聂拉木县| 韩城市| 花莲市| 璧山县| 磴口县| 南丰县| 崇明县| 南漳县| 遵义县| 萨迦县|