• <acronym id="danlv"><form id="danlv"></form></acronym>
  • <dd id="danlv"><rt id="danlv"></rt></dd>
      <var id="danlv"><rt id="danlv"><big id="danlv"></big></rt></var>
      1. <code id="danlv"><ol id="danlv"></ol></code>
        <var id="danlv"><rt id="danlv"></rt></var>
          1. <code id="danlv"></code>
            返回首頁
            當前位置: 主頁 > 網絡編程 > Jsp實例教程 >

            Java實現雞尾酒排序算法

            時間:2013-05-02 21:56來源:知行網www.n1979.com 編輯:麥田守望者

            雞尾酒排序又叫定向冒泡排序,來回排序,漣漪排序,攪拌排序,快樂小時排序,他其實是冒泡排序的一種變形。它和冒泡排序的不同之處就在于:冒泡排序是單向進行的,而雞尾酒排序是以雙向在序列中進行排序的。
             

            雞尾酒算法原理

            i. 先對數組從左到右進行升序的冒泡排序;
            ii. 再對數組進行從右到左的降序的冒泡排序;
            iii. 以此類推,持續的、依次的改變冒泡的方向,并不斷縮小沒有排序的數組范圍;

            如圖所示:

            圖示雞尾酒排序過程
             


            例: 88 7 79 64 55 98 48 52 4 13
            第一趟: 7 79 64 55 88 48 52 4 13 98
            第二趟: 4 7 79 64 55 88 48 42 13 98
            第三趟: 4 7 64 55 79 48 42 13 88 98
            第四趟: 4 7 13 64 55 79 48 42 88 98
            第五趟: 4 7 13 55 64 48 42 79 88 98
            第六趟: 4 7 13 42 55 64 48 79 88 98
            第七趟: 4 7 13 42 55 48 64 79 88 98
            第八趟: 4 7 13 42 48 55 64 79 88 98

            Java代碼實現過程

            在java中使用生成不重復隨機數的方法,生成10個1-100之間的隨機數并存放在num數組對象中。并且因為是雞尾酒排序是左右進行的,所以需要定義標志位String direction=”right”;來指明當前應該向左還是向右排序。完整代碼如下:
            import java.util.Random;

            public class CockSort {

            public static void main(String[] args) {

            // 定義數組num存放10個1-100之間的隨機數字
            int num[] = new int[10];

            Random random = new Random();
            // 生成10個1-100隨機數算法
            for (int i = 0; i < 10; i++) {
            num[i] = random.nextInt(100) + 1;
            for (int j = 0; j < i; j++) {
            if (num[j] == num[i]) {
            i--;
            break;
            }
            }
            }
            // 打印數組對象num
            System.out.println("生成10個隨機數,順序雜亂無章");
            for (int i = 0; i < num.length; i++) {
            System.out.print("num[" + i + "]=" + num[i] + " ");
            }
            String direction="right";
            int small_flag=1;
            // 開始雞尾酒排序算
            for(int k=10;k>5;k--){

            if(direction.equals("right")){

            for (int i = small_flag; i < k; i++) {

            if (num[i] < num[i - 1]) {
            int p = num[i - 1];
            num[i - 1] = num[i];
            num[i] = p;
            }
            }
            direction="left";
            }else{
            for (int i = k-1; i >small_flag-1; i--) {
            if (num[i] < num[i - 1]) {
            int p = num[i - 1];
            num[i - 1] = num[i];
            num[i] = p;
            }
            }
            small_flag++;
            k++;
            direction="right";
            }

            // 打印數組對象nu
            System.out.println();
            System.out.println("使用冒泡排序排列后的順序")
            for (int i = 0; i < num.length; i++)
            System.out.print("num[" + i + "]=" + num[i] + " ");
            }
            }
            }

            得到的一次結果:

            生成10個隨機數,順序雜亂無章
            num[0]=4 num[1]=8 num[2]=12 num[3]=87 num[4]=94 num[5]=32 num[6]=38 num[7]=47 num[8]=85 num[9]=53
            使用冒泡排序排列后的順序
            num[0]=4 num[1]=8 num[2]=12 num[3]=32 num[4]=38 num[5]=47 num[6]=53 num[7]=85 num[8]=87 num[9]=94
             

            ------分隔線----------------------------
            標簽(Tag):雞尾酒排序算法
            ------分隔線----------------------------
            推薦內容
            猜你感興趣
            日韩在线av免费视久久