一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

經(jīng)典排序算法(Java版)

權當復習,以備引用(理論來源于:http://www./jsbase/Suanfa/index.html?defination.htm,感謝該網(wǎng)站。JAVA源碼為我所寫)
1、冒泡排序 Bubble Sort
最簡單的排序方法是冒泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的氣泡,較小的元素比較輕,從而要往上浮。在冒泡排序算法中我們要對這個氣泡序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,并時刻注意兩個相鄰的元素的順序是否正確。如果發(fā)現(xiàn)兩個相鄰元素的順序不對,即的元素在下面,就交換它們的位置。顯然,處理一遍之后,最輕的元素就浮到了最高位置;處理二遍之后,次輕的元素就浮到了次高位置。在作第二遍處理時,由于最高位置上的元素已是最輕元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經(jīng)過前面i-1遍的處理,它們已正確地排好序。這個算法可實現(xiàn)如下。
算法如下:
public static void maopaoSort(int []a){
int i,j,k;
for(i=a.length-1;i>0;i--){
for(j=i-1;j>0;j--){
if(a[i]<a[j]){
k=a[i];
a[i]=a[j];
a[j]=k;
}
2、選擇排序 Selection Sort
選擇排序的基本思想是:對待排序的記錄序列進行n-1遍的處理,第1遍處理是將L[1..n]中最小者與L[1]交換位置,第2遍處理是將L[2..n]中最小者與L[2]交換位置,......,第i遍處理是將L[i..n]中最小者與L[i]交換位置。這樣,經(jīng)過i遍處理之后,前i個記錄的位置就已經(jīng)按從小到大的順序排列好了。
  當然,實際操作時,也可以根據(jù)需要,通過從待排序的記錄中選擇最大者與其首記錄交換位置,按從大到小的順序進行排序處理。
算法如下:
       /**
     *選擇排序
     *@paramsrc待排序的數(shù)組
     */
    void doChooseSort(int[] src)
    {
       int len=src.length;
       int temp;
       for(int i=0;i<len;i++)
       {
           temp=src[i];
           int j;
           int samllestLocation=i;//最小數(shù)的下標
           for(j=i+1;j<len;j++)
           {
              if(src[j]<temp)
              {
                  temp=src[j];//取出最小值
                  samllestLocation=j;//取出最小值所在下標
              }
           }
           src[samllestLocation]=src[i];
           src[i]=temp;
           printResult(i,src);
       }
    }
3、插入排序 Insertion Sort
插入排序的基本思想是,經(jīng)過i-1遍處理后,L[1..i-1]己排好序。第i遍處理僅將L[i]插入L[1..i-1]的適當位置,使得L[1..i]又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。首先比較L[i]L[i-1],如果L[i-1]≤ L[i][1..i]已排好序,第i遍處理就結束了;否則交換L[i]L[i-1]的位置,繼續(xù)比較L[i-1]L[i-2],直到找到某一個位置j(1≤j≤i-1),使得L[j] ≤L[j+1]時為止。
  簡言之,插入排序就是每一步都將一個待排數(shù)據(jù)按其大小插入到已經(jīng)排序的數(shù)據(jù)中的適當位置,直到全部插入完畢。插入排序方法分直接插入排序和折半插入排序兩種,這里只介紹直接插入排序,折半插入排序留到查找內容中進行。
  圖1演示了對4個元素進行直接插入排序的過程,共需要(a),(b),(c)三次插入。
1 4個元素進行插入排序
在下面的插入排序算法中,為了寫程序方便我們可以引入一個哨兵元素L[0],它小于L[1..n]中任一記錄。所以,我們設元素的類型ElementType中有一個常量-∞,它比可能出現(xiàn)的任何記錄都小。如果常量-∞不好事先確定,就必須在決定L[i]是否向前移動之前檢查當前位置是否為1,若當前位置已經(jīng)為1時就應結束第i遍的處理。另一個辦法是在第i遍處理開始時,就將L[i]放入L[0]中,這樣也可以保證在適當?shù)臅r候結束第i遍處理。下面的算法中將對當前位置進行判斷。
算法如下:
    /**
     *插入排序(WHILE循環(huán)實現(xiàn))
     *@paramsrc待排序數(shù)組
     */
    void doInsertSort1(int[] src)
    {
       int len=src.length;
       for(int i=1;i<len;i++)
       {  
           int temp=src[i];
           int j=i;
          
           while(src[j-1]>temp)
           {
              src[j]=src[j-1];
              j--;
              if(j<=0)
                  break;
           }
           src[j]=temp;
           printResult(i+1,src);
       }
    }
    /**
     *插入排序(FOR循環(huán)實現(xiàn))
     *@paramsrc待排序數(shù)組
     */
    void doInsertSort2(int[] src)
    {
       int len=src.length;
       for(int i=1;i<len;i++)
       {
           int j;
           int temp=src[i];
           for(j=i;j>0;j--)
           {
              if(src[j-1]>temp)
              {
                  src[j]=src[j-1];
                 
              }else//如果當前的數(shù),不小前面的數(shù),那就說明不小于前面所有的數(shù),
                   //因為前面已經(jīng)是排好了序的,所以直接通出當前一輪的比較
                  break;
           }
           src[j]=temp;
           printResult(i,src);
       }
    }

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美av人人妻av人人爽蜜桃| 亚洲视频一区自拍偷拍另类| 99久热只有精品视频免费看| 最新日韩精品一推荐日韩精品| 欧美日韩久久精品一区二区| 亚洲精选91福利在线观看| 国产午夜精品美女露脸视频| 大香蕉久草网一区二区三区 | 日本深夜福利在线播放| 亚洲精品黄色片中文字幕| 欧美成人国产精品高清| 中文字幕欧美视频二区| 欧美三级精品在线观看| 国产av大片一区二区三区| 国产又粗又深又猛又爽又黄| 日本欧美三级中文字幕| 国产免费一区二区不卡| 大香蕉大香蕉手机在线视频| 中文字幕免费观看亚洲视频| 国产成人精品一区二三区在线观看| 日本女优一色一伦一区二区三区| 国产性情片一区二区三区| 亚洲伦理中文字幕在线观看| 在线免费国产一区二区三区| 国产日韩中文视频一区| 欧美精品在线观看国产| 中文字幕日韩无套内射| 国产午夜精品久久福利| 国产精品白丝一区二区| 亚洲一区二区精品久久av| 日韩av欧美中文字幕| 不卡一区二区高清视频| 神马午夜福利一区二区| 欧洲日本亚洲一区二区| 亚洲欧美日韩熟女第一页| 99少妇偷拍视频在线| 精品欧美国产一二三区| 亚洲精品福利入口在线| 日韩欧美精品一区二区三区| 日韩视频在线观看成人| 日韩一区二区三区嘿嘿|