JAVA四種基本排序的總結(jié)

           

          JAVA四種基本排序,包括冒泡法,插入法,選擇法,SHELL排序法.其中選擇法是冒泡法的改進(jìn),SHELL排序法是 插入法的改進(jìn).所以從根本上來(lái)說(shuō)可以歸納為兩種不同的排序方法::插入法&冒泡法

          插入法:遍歷排序集合,每到一個(gè)元素時(shí),都要將這個(gè)元素與所有它之前的元素遍歷比較一遍,讓符合排序順序的元素挨個(gè)移動(dòng)到當(dāng)前范圍內(nèi)它最應(yīng)該出現(xiàn)的位置。交換是相鄰遍歷移動(dòng),雙重循環(huán)控制實(shí)現(xiàn).這種排序法屬于地頭蛇類型,在我的地牌上我要把所有的東西按一定的順序規(guī)整,過(guò)來(lái)一個(gè),規(guī)整一個(gè).
          處理代碼如下:

          public void sort(int[] data) {
             int temp; 
             for(int i=1; i〈data.length; i++){
                for(int j=i; (j〉0)&&(data[j]〉data[j-1]); j--){
                   temp
          =date[j]; 
                   data[j]
          =data[j-1]; 
                   data[j
          -1]=temp; 
                }
             } 
          }


          二冒泡法:比較容易,它的內(nèi)層循環(huán)保證遍歷一次后,集合中最小(大)元素出現(xiàn)在它的正確位置,下一次就是次小元素。。。該方法在集合分布的各種情況下交換移動(dòng)的次數(shù)基本不變,屬于最慢的一種排序。實(shí)現(xiàn)也是雙重循環(huán)控制。這種排序法屬于過(guò)江龍,就是要找到極端,但是過(guò)獎(jiǎng)龍也有大哥,二哥等,所以他們只能是大哥挑了二哥挑.
          處理代碼如下:

          public static int [] maopao(int[] data) {
             int temp; 
             for(int i=0; i〈data.length-1; i++){
                for(int j=i+1; j〈data.length; j++){
                if(data[i]〈data[j]){
                   temp
          =data[i]; 
                   data[i]
          =data[j]; 
                   data[j]
          =temp; 
                } 
             }

          return data; 


          三選擇法:該方法只是通過(guò)遍歷集合記錄最小(大)元素的位置,一次遍歷完后,再進(jìn)行交換位置操作,類似冒泡,但在比較過(guò)程中,不進(jìn)行交換操作,只記錄元素位置。一次遍歷只進(jìn)行一次交換操作。這個(gè)對(duì)與交換次序比較費(fèi)時(shí)的元素比較適合。這種排序法比冒泡法要城府要深的多,我先記住極端數(shù)據(jù),待遍歷數(shù)據(jù)完了之后,我再處理,不像冒泡法那樣只要比自己極端一點(diǎn)的就要處理,選擇法只處理本身范圍內(nèi)的最極端數(shù)據(jù).

          public static void xuanze(int[] data) {
             int temp; 
             for (int i = 0; i 〈 data.length; i++) {
                int lowIndex = i; 
                for (int j = data.length - 1; j 〉 i; j--) {
                   if (data[j] 〉 data[lowIndex]) {
                      lowIndex 
          = j; 
                   }
                }
                temp
          =data[i]; 
                data[i]
          =data[lowIndex]; 
                data[lowIndex]
          =temp; 
             }
          }


          Shell排序:
          它是對(duì)插入排序的一種改進(jìn),是考慮將集合元素按照一定的基數(shù)劃分成組去排序,讓每一組在局部范圍內(nèi)先排成基本有序,最后在進(jìn)行一次所有元素的插入排序。

          public void sort(int[] data) {
             for(int i=data.length/2; i〉2; i/=2){
                for(int j=0; j〈i; j++){
                   insertSort(data,j,i); 
                }
             }
             insertSort(data,
          0,1); 
          }

          private void insertSort(int[] data, int start, int inc) {
             int temp; 
             for(int i=start+inc; i〈data.length; i+=inc){
                for(int j=i; (j〉=inc)&&(data[j]〈data[j-inc]); j-=inc){
                   temp
          =data[j]; 
                   data[j]
          =data[j-inc]
                   data[j
          -inc]=temp; 
                }
             }
          }


          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1630773

          posted on 2007-06-28 11:06 萬(wàn)博 閱讀(290) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          留言簿(1)

          隨筆檔案(13)

          搜索

          積分與排名

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 昌平区| 吉木萨尔县| 绥棱县| 陆良县| 青州市| 东阿县| 焦作市| 鄱阳县| 钟山县| 满洲里市| 北碚区| 耿马| 吴忠市| 辛集市| 巢湖市| 安远县| 无锡市| 巨野县| 石台县| 延庆县| 玛纳斯县| 盐津县| 田东县| 东山县| 海盐县| 化隆| 新田县| 南开区| 孝感市| 修武县| 墨竹工卡县| 巴林右旗| 禄劝| 马山县| 麻江县| 永靖县| 政和县| 资溪县| 南昌市| 天门市| 子长县|