<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 4, comments - 5, trackbacks - 0, articles - 10

    java排序法

    Posted on 2005-12-05 20:24 勇敢的心 閱讀(607) 評論(0)  編輯  收藏 所屬分類: Java
    /*這個程序是我在一個帖子上看到的,覺得寫的十分的不錯,拿出來與大家共享下*/
    package com.cucu.test; 

    public class Sort { 

      public void swap(int a[], int i, int j) { 
        int tmp = a[i]; 
        a[i] = a[j]; 
        a[j] = tmp; 
      } 

      public int partition(int a[], int low, int high) { 
        int pivot, p_pos, i; 
        p_pos = low; 
        pivot = a[p_pos]; 
        for (i = low + 1; i <= high; i++) { 
          if (a[i] > pivot) { 
            p_pos++; 
            swap(a, p_pos, i); 
          } 
        } 
        swap(a, low, p_pos); 
        return p_pos; 
      } 

      public void quicksort(int a[], int low, int high) { 
        int pivot; 
        if (low < high) { 
          pivot = partition(a, low, high); 
          quicksort(a, low, pivot - 1); 
          quicksort(a, pivot + 1, high); 
        } 

      } 

      public static void main(String args[]) { 
        int vec[] = new int[] { 37, 47, 23, -5, 19, 56 }; 
        int temp; 
        //選擇排序法(Selection Sort) 
        long begin = System.currentTimeMillis(); 
        for (int k = 0; k < 1000000; k++) { 
          for (int i = 0; i < vec.length; i++) { 
            for (int j = i; j < vec.length; j++) { 
              if (vec[j] > vec[i]) { 
                temp = vec[i]; 
                vec[i] = vec[j]; 
                vec[j] = temp; 
              } 
            } 

          } 
        } 
        long end = System.currentTimeMillis(); 
        System.out.println("選擇法用時為:" + (end - begin)); 
        //打印排序好的結果 
        for (int i = 0; i < vec.length; i++) { 
          System.out.println(vec[i]); 
        } 
        //  冒泡排序法(Bubble Sort) 
        begin = System.currentTimeMillis(); 
        for (int k = 0; k < 1000000; k++) { 
          for (int i = 0; i < vec.length; i++) { 
            for (int j = i; j < vec.length - 1; j++) { 
              if (vec[j + 1] > vec[j]) { 
                temp = vec[j + 1]; 
                vec[j + 1] = vec[j]; 
                vec[j] = temp; 
              } 
            } 

          } 
        } 
        end = System.currentTimeMillis(); 
        System.out.println("冒泡法用時為:" + (end - begin)); 
        //打印排序好的結果 
        for (int i = 0; i < vec.length; i++) { 
          System.out.println(vec[i]); 
        } 

        //插入排序法(Insertion Sort) 
        begin = System.currentTimeMillis(); 
        for (int k = 0; k < 1000000; k++) { 
          for (int i = 1; i < vec.length; i++) { 
            int j = i; 
            while (vec[j - 1] < vec[i]) { 
              vec[j] = vec[j - 1]; 
              j--; 
              if (j <= 0) { 
                break; 
              } 
            } 
            vec[j] = vec[i]; 
          } 
        } 
        end = System.currentTimeMillis(); 
        System.out.println("插入法用時為:" + (end - begin)); 
        //打印排序好的結果 
        for (int i = 0; i < vec.length; i++) { 
          System.out.println(vec[i]); 
        } 

        //快速排序法(Quick Sort) 

        Sort s = new Sort(); 
        begin = System.currentTimeMillis(); 
        for (int k = 0; k < 1000000; k++) { 
          s.quicksort(vec, 0, 5); 
        } 
        end = System.currentTimeMillis(); 
        System.out.println("快速法用時為:" + (end - begin)); 
        //打印排序好的結果 
        for (int i = 0; i < vec.length; i++) { 
          System.out.println(vec[i]); 
        } 
      } 



    ************************************************************************************

    1. package org.jr.util;

    2. /**
    3. * Copyright: Copyright (c) 2002-2004
    4. * Company: JavaResearch(http://www.javaresearch.org)
    5. * 最后更新日期:2003年3月4日
    6. * @author Cherami
    7. */

    8. import org.jr.*;

    9. /**
    10. * 排序工具類,提供常見的需要排序但是又沒有實現Comparable接口的類。
    11. * 此類也提供一些創建的排序算法的范例。
    12. * @since  0.5
    13. */

    14. public class CompareUtil {
    15.   /**
    16.    * 私有構造方法,防止類的實例化,因為工具類不需要實例化。
    17.    */
    18.   private CompareUtil() {
    19.   }

    20.   /**
    21.    * 比較兩個數字。
    22.    * 這個方法取Number的double值進行比較,因此只有在兩個數嚴格相等的情況下才返回0,
    23.    * 又可能因為Java中Double型和Float的精度不同而導致兩個相等的數不返回0。
    24.    * @param o1 第一個數字
    25.    * @param o2 第二個數字
    26.    * @return 第一個數字大于第二個返回1,等于返回0,否則返回-1
    27.    * @since  0.5
    28.    */
    29.   public static int compare(Number o1, Number o2) {
    30.     double n1 = o1.doubleValue();
    31.     double n2 = o2.doubleValue();
    32.     if (n1 < n2) {
    33.       return -1;
    34.     }
    35.     else if (n1 > n2) {
    36.       return 1;
    37.     }
    38.     else {
    39.       return 0;
    40.     }
    41.   }

    42.   /**
    43.    * 比較兩個布爾型值。
    44.    * 如果兩個的值不同,true被認為等于1,而false等于0。
    45.    * @param o1 第一個值
    46.    * @param o2 第二個值
    47.    * @return 第一個值大于第二個返回1,等于返回0,否則返回-1
    48.    * @since  0.5
    49.    */
    50.   public static int compare(Boolean o1, Boolean o2) {
    51.     boolean b1 = o1.booleanValue();
    52.     boolean b2 = o2.booleanValue();
    53.     if (b1 == b2) {
    54.       return 0;
    55.     }
    56.     else if (b1) {
    57.       return 1;
    58.     }
    59.     else {
    60.       return -1;
    61.     }
    62.   }

    63.   /**
    64.    * 冒泡排序法排序。
    65.    * @param objects 排序對象
    66.    * @param isAscent 排序順序
    67.    * @return 排序后應該有的索引數組
    68.    * @since  0.5
    69.    */
    70.   public static int[] n2sort(Comparable[] objects, boolean isAscent) {
    71.     int length = objects.length;
    72.     int[] indexes = ArrayUtil.getInitedIntArray(length);
    73.     for (int i = 0; i < length; i++) {
    74.       for (int j = i + 1; j < length; j++) {
    75.         if (isAscent == true) {
    76.           if (objects[indexes[i]].compareTo(objects[indexes[j]]) > 0) {
    77.             swap(indexes, i, j);
    78.           }
    79.         }
    80.         else {
    81.           if (objects[indexes[i]].compareTo(objects[indexes[j]]) < 0) {
    82.             swap(indexes, i, j);
    83.           }
    84.         }
    85.       }
    86.     }
    87.     return indexes;
    88.   }

    89.   /**
    90.    * 冒泡排序法排序。
    91.    * @param objects 排序對象
    92.    * @param key 排序關鍵字
    93.    * @param isAscent 排序順序
    94.    * @return 排序后應該有的索引數組
    95.    * @since  0.5
    96.    */
    97.   public static int[] n2sort(PropertyComparable[] objects, int key,
    98.                              boolean isAscent) {
    99.     int length = objects.length;
    100.     int[] indexes = ArrayUtil.getInitedIntArray(length);
    101.     for (int i = 0; i < length; i++) {
    102.       for (int j = i + 1; j < length; j++) {
    103.         if (isAscent == true) {
    104.           if (objects[indexes[i]].compareTo(objects[indexes[j]], key) > 0) {
    105.             swap(indexes, i, j);
    106.           }
    107.         }
    108.         else {
    109.           if (objects[indexes[i]].compareTo(objects[indexes[j]], key) < 0) {
    110.             swap(indexes, i, j);
    111.           }
    112.         }
    113.       }
    114.     }
    115.     return indexes;
    116.   }

    117.   /**
    118.    * 冒泡排序法排序。
    119.    * @param objects 排序對象
    120.    * @return 按照升序排序后應該有的索引數組
    121.    * @since  0.6
    122.    */
    123.   public static int[] n2sort(Comparable[] objects) {
    124.     return n2sort(objects,true);
    125.   }

    126.   /**
    127.    * 冒泡排序法排序。
    128.    * @param objects 排序對象
    129.    * @param key 排序關鍵字
    130.    * @return 按照升序排序后應該有的索引數組
    131.    * @since  0.6
    132.    */
    133.   public static int[] n2sort(PropertyComparable[] objects, int key) {
    134.     return n2sort(objects,key);
    135.   }

    136.   /**
    137.    * 插入排序法排序。
    138.    * @param objects 排序對象
    139.    * @return 按照升序排序后應該有的索引數組
    140.    * @since  0.6
    141.    */
    142.   public static int[] insertionSort(Comparable[] objects) {
    143.     int length = objects.length;
    144.     int[] indexes = ArrayUtil.getInitedIntArray(length);
    145.     for (int i = 1; i < length; i++) {
    146.         int j = i;
    147.         Comparable B = objects[indexes[i]];
    148.         while ((j > 0) && (objects[indexes[j-1]].compareTo(B) > 0)) {
    149.             indexes[j] = indexes[j-1];
    150.             j--;
    151.         }
    152.         indexes[j] = i;
    153.     }
    154.     return indexes;
    155.   }

    156.   /**
    157.    * 插入排序法排序。
    158.    * @param objects 排序對象
    159.    * @param key 排序關鍵字
    160.    * @return 按照升序排序后應該有的索引數組
    161.    * @since  0.6
    162.    */
    163.   public static int[] insertionSort(PropertyComparable[] objects, int key) {
    164.     int length = objects.length;
    165.     int[] indexes = ArrayUtil.getInitedIntArray(length);
    166.     for (int i = 1; i < length; i++) {
    167.         int j = i;
    168.         Comparable B = objects[indexes[i]];
    169.         while ((j > 0) && (objects[indexes[j-1]].compareTo(B,key) > 0)) {
    170.             indexes[j] = indexes[j-1];
    171.             j--;
    172.         }
    173.         indexes[j] = i;
    174.     }
    175.     return indexes;
    176.   }

    177.   /**
    178.    * 選擇排序法排序。
    179.    * @param objects 排序對象
    180.    * @return 按照升序排序后應該有的索引數組
    181.    * @since  0.6
    182.    */
    183.   public static int[] selectionSort(Comparable[] objects) {
    184.     int length = objects.length;
    185.     int[] indexes = ArrayUtil.getInitedIntArray(length);
    186.     for (int i = 0; i < length; i++) {
    187.         int min = i;
    188.         int j;
    189.         //在未排序列表里面查找最小元素
    190.         for (j = i + 1; j < length; j++) {
    191.             if (objects[indexes[j]].compareTo(objects[indexes[min]]) <0 ) {
    192.                 min = j;
    193.             }
    194.         }
    195.         //將最小的元素交換到未排序元素的最開始
    196.         swap(indexes,i,min);
    197.     }
    198.     return indexes;
    199.   }

    200.   /**
    201.    * 選擇排序法排序。
    202.    * @param objects 排序對象
    203.    * @param key 排序關鍵字
    204.    * @return 按照升序排序后應該有的索引數組
    205.    * @since  0.6
    206.    */
    207.   public static int[] selectionSort(PropertyComparable[] objects, int key) {
    208.     int length = objects.length;
    209.     int[] indexes = ArrayUtil.getInitedIntArray(length);
    210.     for (int i = 0; i < length; i++) {
    211.         int min = i;
    212.         int j;
    213.         //在未排序列表里面查找最小元素
    214.         for (j = i + 1; j < length; j++) {
    215.             if (objects[indexes[j]].compareTo(objects[indexes[min]],key) <0 ) {
    216.                 min = j;
    217.             }
    218.         }
    219.         //將最小的元素交換到未排序元素的最開始
    220.         swap(indexes,i,min);
    221.     }
    222.     return indexes;
    223.   }

    224.   /**
    225.    * 雙向冒泡排序法排序。
    226.    * @param objects 排序對象
    227.    * @return 按照升序排序后應該有的索引數組
    228.    * @since  0.6
    229.    */
    230.   public static int[] bidirectionalBubbleSort(Comparable[] objects) {
    231.     int length = objects.length;
    232.     int[] indexes = ArrayUtil.getInitedIntArray(length);
    233.     int j;
    234.     int limit = objects.length;
    235.     int start = -1;
    236.     while (start < limit) {
    237.         start++;
    238.         limit--;
    239.         for (j = start; j < limit; j++) {
    240.             if (objects[indexes[j]].compareTo(objects[indexes[j+1]]) > 0) {
    241.               swap(indexes,j,j+1);
    242.             }
    243.         }
    244.         for (j = limit; --j >= start;) {
    245.           if (objects[indexes[j]].compareTo(objects[indexes[j+1]]) > 0) {
    246.             swap(indexes,j,j+1);
    247.           }
    248.         }
    249.     }
    250.     return indexes;
    251.   }

    252.   /**
    253.    * 雙向冒泡排序法排序。
    254.    * @param objects 排序對象
    255.    * @param key 排序關鍵字
    256.    * @return 按照升序排序后應該有的索引數組
    257.    * @since  0.6
    258.    */
    259.   public static int[] bidirectionalBubbleSort(PropertyComparable[] objects, int key) {
    260.     int length = objects.length;
    261.     int[] indexes = ArrayUtil.getInitedIntArray(length);
    262.     int j;
    263.     int limit = objects.length;
    264.     int start = -1;
    265.     while (start < limit) {
    266.         start++;
    267.         limit--;
    268.         for (j = start; j < limit; j++) {
    269.             if (objects[indexes[j]].compareTo(objects[indexes[j+1]]) > 0) {
    270.               swap(indexes,j,j+1);
    271.             }
    272.         }
    273.         for (j = limit; --j >= start;) {
    274.           if (objects[indexes[j]].compareTo(objects[indexes[j+1]],key) > 0) {
    275.             swap(indexes,j,j+1);
    276.           }
    277.         }
    278.     }
    279.     return indexes;
    280.   }

    281.   /**
    282.    * 交換兩個元素的值。
    283.    * @param indexes 原索引數組
    284.    * @param i 第一行
    285.    * @param j 第二行
    286.    */
    287.   private static void swap(int[] indexes, int i, int j) {
    288.     int tmp = indexes[i];
    289.     indexes[i] = indexes[j];
    290.     indexes[j] = tmp;
    291.   }

    292. }
    293. ------------------------------------------
    294. 冒泡排序:
    295. 1、比較相鄰的兩個元素,如果后面的比前面小,就對調二者。反復比較,到最后兩個元素。結果,最大值就跑到了最末位置。

    296. 2、反復第一步,直到所有較大值都跑到靠后的位置。

    297. ---------------------------------------------

    298. 選擇排序

    299. 1、一開始整個數列是未排列的

    300. 2、從未排列的數中,挑選出最小的數,和未排列的數中的第一個元素互調,并將該最小的數歸類到已排序的序列中;

    301. 3、重復第2步,直到所有的數都歸類到已排序數列中。

    302. ---------------------------------------------

    303. 插入排序法:

    304. 1、一開始只有第一個數在已排序數列中,其他的數歸類到未排序數列中;

    305. 2、將未排序的第一個數,插入到已排序數列中,使得插入后的已排序數列仍然維持由小到大的順序;

    306. 3、重復步驟2,直到所有的數都在已排序數列中。

    307. -----------------------------------------------

    主站蜘蛛池模板: 亚洲小说区图片区| 亚洲AV无码一区二区三区牲色| 在线亚洲高清揄拍自拍一品区| 免费国产高清毛不卡片基地| 香蕉免费一区二区三区| 免费高清小黄站在线观看| 亚洲精品无码国产| 亚洲精品又粗又大又爽A片| 最近的2019免费中文字幕| 永久免费av无码网站韩国毛片| 亚洲AV无码不卡在线观看下载| 亚洲精品美女久久久久9999| 羞羞视频在线观看免费| 国产一卡二卡四卡免费| 亚洲中久无码不卡永久在线观看| 亚洲国产成人久久精品app| www免费黄色网| 大陆一级毛片免费视频观看| 亚洲成a人片在线观看无码专区| 亚洲AV电影天堂男人的天堂| 91人成网站色www免费下载| 亚洲第一区精品观看| 亚洲av一本岛在线播放| 91精品成人免费国产| 国产v片免费播放| 亚洲国产高清在线精品一区| 中文日本免费高清| 妞干网在线免费观看| 午夜亚洲国产理论秋霞| 一级毛片**免费看试看20分钟| 我要看WWW免费看插插视频| 亚洲激情视频在线观看| 国产精品免费一区二区三区| 免费毛片在线播放| 亚洲国产精品综合一区在线| 精品国产污污免费网站| 久久乐国产精品亚洲综合| 粉色视频在线观看www免费| 成视频年人黄网站免费视频| 亚洲电影中文字幕| 中文字幕版免费电影网站|