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

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

冒泡,選擇,插入排序算法總結

2019-11-09 17:47:44
字體:
來源:轉載
供稿:網友

一.冒泡排序

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

思路:依次比較相鄰的兩個數,將小數放在前面,大數放在后面。

即在第一趟:首先比較第1個和第2個數,將小數放前,大數放后。

然后比較第2個數和第3個數,將小數放前,大數放后,如此繼續,直至比較最后兩個數,將小數放前,大數放后。

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

舉例說明:要排序數組: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

第一趟總共進行了5次比較, 排序結果:      3  6  2  8  1  9

算法實現:

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;

}  

 

二.快速排序

原理:對于給定的一組記錄,選擇一個基準元素,通常選擇第一個元素或者最后一個元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準元素小,一部分大于等于基準元素,此時基準元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序劃分的兩部分,直到序列中的所有記錄均有序為止。

舉例說明:

一趟排序的過程:

 

算法如下:

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)  //如果沒有比關鍵值小的,比較下一個,直到有比關鍵值小的交換位置,然后又從前往后比較

                 end--;

             if(a[end]<=key){

                 int temp = a[end];

                 a[end] = a[start];

                 a[start] = temp;

             }

             //從前往后比較

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

                start++;

             if(a[start]>=key){

                 int temp = a[start];

                 a[start] = a[end];

                 a[end] = temp;

             }

         //此時第一次循環比較結束,關鍵值的位置已經確定了。左邊的值都比關鍵值小,右邊的值都比關鍵值大,但是兩邊的順序還有可能是不一樣的,進行下面的遞歸調用

         }

         //遞歸

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

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

     }

}

三.插入排序

原理:插入排序就是把當前待排序的元素插入到一個已經排好序的列表里面。

算法如下:

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;      }  }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏尼特左旗| 稷山县| 临泽县| 上林县| 湖北省| 攀枝花市| 分宜县| 方正县| 怀远县| 清涧县| 大冶市| 洱源县| 宁海县| 北海市| 志丹县| 元朗区| 双辽市| 淳安县| 常山县| 南岸区| 陇南市| 巴东县| 冕宁县| 河东区| 江永县| 乌兰察布市| 二连浩特市| 卢氏县| 闽清县| 大厂| 平阳县| 铅山县| 海晏县| 玛沁县| 中卫市| 沅江市| 巴彦县| 名山县| 梅河口市| 宿松县| 汉川市|