如何學(xué)好java

          如何學(xué)好java,其實很簡單,只要用心體會,慢慢積累!
          posts - 106, comments - 7, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          java數(shù)據(jù)結(jié)構(gòu)之排序

          Posted on 2014-01-02 22:32 哈希 閱讀(194) 評論(0)  編輯  收藏 所屬分類: java 代碼

           冒泡排序(Bubble Sort)是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端。

            冒泡排序算法的運(yùn)作如下:

          1.  比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
          2.  對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。在這一點,最后的元素應(yīng)該會是最大的數(shù)。
          3.  針對所有的元素重復(fù)以上的步驟,除了最后一個。
          4.  持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

          冒泡排序的過程圖:

          Bubble Sorte Animation

          代碼:

          復(fù)制代碼
           1 public class BubbleSort{
          2 public static void main(String[] args){
          3 int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
          4 for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序
          5 for(int j = 0 ;j < score.length - i - 1; j++){ //對當(dāng)前無序區(qū)間score[0......length-i-1]進(jìn)行排序(j的范圍很關(guān)鍵,這個范圍是在逐步縮小的)
          6 if(score[j] < score[j + 1]){ //把小的值交換到后面
          7 int temp = score[j];
          8 score[j] = score[j + 1];
          9 score[j + 1] = temp;
          10 }
          11 }
          12 System.out.print("第" + (i + 1) + "次排序結(jié)果:");
          13 for(int a = 0; a < score.length; a++){
          14 System.out.print(score[a] + "\t");
          15 }
          16 System.out.println("");
          17 }
          18 System.out.print("最終排序結(jié)果:");
          19 for(int a = 0; a < score.length; a++){
          20 System.out.print(score[a] + "\t");
          21 }
          22 }
          23 }
          復(fù)制代碼

          Java中的快速排序源代碼

          public class QuickSort {

            public static void main(String[] args) {

            Random random=new Random();

            int[] pData=new int[10];

            for(int i=0;i<pData.length;i++){ //隨機(jī)生成10個排序數(shù)

            Integer a =random.nextInt(100);

            pData[i]= a;

            System.out.print(pData[i]+&quot; &quot;);

            }

            System.out.println();

            int left=0;

            int right=pData.length-1;

            Sort(pData,left,right);

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

            System.out.print(pData[i]+&quot; &quot;);

            }

            System.out.println();

            }

            public static int[] Sort(int[] pData, int left, int right){

            int middle,strTemp;

            int i = left;

            int j = right;

            middle = pData[(left+right)/2];

            do{

            while((pData[i]<middle) && (i<right))

            i++;

            while((pData[j]>middle) && (j>left))

            j--;

            if(i<=j){

            strTemp = pData[i];

            pData[i] = pData[j];

            pData[j] = strTemp;

            i++;

            j--;

            }

            for(int k=0;k<pData.length;k++){

            System.out.print(pData[k]+&quot; &quot;);

            }

            System.out.println();

            }while(i<j);//如果兩邊掃描的下標(biāo)交錯,完成一次排序

            if(left<j)

            Sort(pData,left,j); //遞歸調(diào)用

            if(right>i)

            Sort(pData,i,right); //遞歸調(diào)用

            return pData;

            }

            }




          二分法就是在排序數(shù)組中從前到后逐漸的進(jìn)行排序,是循環(huán)一次后前面的數(shù)據(jù)就是有序的,然后就以此往后使得整個數(shù)組為有序的數(shù)組。(二分法排序示例代碼:)

          package binarySort;

          public class binarySort {

           public static void binary_sort(int a[])
           {
            int i,j,temp;
            int low ,hight ,mid;
            for(i=1;i<a.length;i++)
            {
             temp = a[i];
             low = 0;
             hight = i-1;
             while(low<=hight)
             {
              mid = (low+hight)/2;
              if(a[mid]>temp)
               hight =mid -1;
              else
               low = mid + 1;
             }
             for(j =i-1;j>hight;j--)
              a[j+1] = a[j];
             a[hight+1] = temp;
            }
           }
           public static void main(String[] args) {
            int a[] = {2,6,9,8,4,7,3,1,0,5};
            binary_sort(a);
            for(int i=0;i<a.length;i++)
             System.out.print(a[i]+ " ");
           }
          }

          主站蜘蛛池模板: 大城县| 洛隆县| 黄石市| 营山县| 沅江市| 根河市| 广东省| 忻州市| 德安县| 胶州市| 东兰县| 汾西县| 壶关县| 福建省| 醴陵市| 阳东县| 兖州市| 龙南县| 浦东新区| 兴国县| 左云县| 柯坪县| 兴义市| 平远县| 深泽县| 舟曲县| 文登市| 鄂尔多斯市| 塔河县| 乐至县| 泰安市| 奎屯市| 桦南县| 托克逊县| 余姚市| 霞浦县| 洪雅县| 龙陵县| 万州区| 景谷| 鄂伦春自治旗|