亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java實現八個常用的排序算法:插入排序、冒泡排序、選擇排序、希爾排序等

2019-11-26 15:02:34
字體:
來源:轉載
供稿:網友

本文實現了八個常用的排序算法:插入排序、冒泡排序、選擇排序、希爾排序 、快速排序、歸并排序、堆排序和LST基數排序

首先是EightAlgorithms.java文件,代碼如下:

import java.util.Arrays; /*  * 實現了八個常用的排序算法:插入排序、冒泡排序、選擇排序、希爾排序  * 以及快速排序、歸并排序、堆排序和LST基數排序  * @author gkh178  */ public class EightAlgorithms {      //插入排序:時間復雜度o(n^2)    public static void insertSort(int a[], int n) {     for (int i = 1; i < n; ++i) {       int temp = a[i];       int j = i - 1;       while (j >= 0 && a[j] > temp) {         a[j + 1] =a[j];         --j;       }       a[j + 1] = temp;     }   }      //冒泡排序:時間復雜度o(n^2)    public static void bubbleSort(int a[], int n) {     for (int i = n - 1; i > 0; --i) {       for (int j = 0; j < i; ++j) {         if (a[j] > a[j + 1]) {           int temp = a[j];           a[j] = a[j + 1];           a[j + 1] = temp;             }       }       }     }      //選擇排序:時間復雜度o(n^2)    public static void selectSort(int a[], int n) {     for (int i = 0; i < n - 1; ++i) {       int min = a[i];       int index = i;       for (int j = i + 1; j < n; ++j) {         if (a[j] < min) {           min = a[j];           index = j;         }         }       a[index] = a[i];       a[i] = min;     }   }      //希爾排序:時間復雜度介于o(n^2)和o(nlgn)之間    public static void shellSort(int a[], int n) {     for (int gap = n / 2; gap >= 1; gap /= 2) {       for (int i = gap; i < n; ++i) {         int temp = a[i];         int j = i -gap;         while (j >= 0 && a[j] > temp) {           a[j + gap] = a[j];           j -= gap;         }         a[j + gap] = temp;       }     }     }      //快速排序:時間復雜度o(nlgn)    public static void quickSort(int a[], int n) {     _quickSort(a, 0, n-1);   }   public static void _quickSort(int a[], int left, int right) {     if (left < right) {       int q = _partition(a, left, right);       _quickSort(a, left, q - 1);       _quickSort(a, q + 1, right);     }   }   public static int _partition(int a[], int left, int right) {     int pivot = a[left];     while (left < right) {       while (left < right && a[right] >= pivot) {         --right;       }       a[left] = a[right];       while (left <right && a[left] <= pivot) {         ++left;       }       a[right] = a[left];     }     a[left] = pivot;     return left;   }      //歸并排序:時間復雜度o(nlgn)    public static void mergeSort(int a[], int n) {     _mergeSort(a, 0 , n-1);   }   public static void _mergeSort(int a[], int left, int right) {     if (left <right) {       int mid = left + (right - left) / 2;       _mergeSort(a, left, mid);       _mergeSort(a, mid + 1, right);       _merge(a, left, mid, right);     }   }   public static void _merge(int a[], int left, int mid, int right) {     int length = right - left + 1;     int newA[] = new int[length];     for (int i = 0, j = left; i <= length - 1; ++i, ++j) {       newA[i] = a[j];     }     int i = 0;     int j = mid -left + 1;     int k = left;     for (; i <= mid - left && j <= length - 1; ++k) {       if (newA[i] < newA[j]) {         a[k] = newA[i++];       }       else {         a[k] = newA[j++];       }     }     while (i <= mid - left) {       a[k++] = newA[i++];     }     while (j <= right - left) {       a[k++] = newA[j++];     }   }      //堆排序:時間復雜度o(nlgn)    public static void heapSort(int a[], int n) {     builtMaxHeap(a, n);//建立初始大根堆     //交換首尾元素,并對交換后排除尾元素的數組進行一次上調整     for (int i = n - 1; i >= 1; --i) {       int temp = a[0];       a[0] = a[i];       a[i] = temp;       upAdjust(a, i);     }   }   //建立一個長度為n的大根堆   public static void builtMaxHeap(int a[], int n) {     upAdjust(a, n);   }   //對長度為n的數組進行一次上調整   public static void upAdjust(int a[], int n) {     //對每個帶有子女節點的元素遍歷處理,從后到根節點位置     for (int i = n / 2; i >= 1; --i) {       adjustNode(a, n, i);     }   }   //調整序號為i的節點的值   public static void adjustNode(int a[], int n, int i) {     //節點有左右孩子     if (2 * i + 1 <= n) {       //右孩子的值大于節點的值,交換它們       if (a[2 * i] > a[i - 1]) {         int temp = a[2 * i];         a[2 * i] = a[i - 1];         a[i - 1] = temp;       }       //左孩子的值大于節點的值,交換它們       if (a[2 * i -1] > a[i - 1]) {         int temp = a[2 * i - 1];         a[2 * i - 1] = a[i - 1];         a[i - 1] = temp;       }       //對節點的左右孩子的根節點進行調整       adjustNode(a, n, 2 * i);       adjustNode(a, n, 2 * i + 1);     }     //節點只有左孩子,為最后一個有左右孩子的節點     else if (2 * i == n) {       //左孩子的值大于節點的值,交換它們       if (a[2 * i -1] > a[i - 1]) {         int temp = a[2 * i - 1];         a[2 * i - 1] = a[i - 1];         a[i - 1] = temp;       }       }   }      //基數排序的時間復雜度為o(distance(n+radix)),distance為位數,n為數組個數,radix為基數   //本方法是用LST方法進行基數排序,MST方法不包含在內   //其中參數radix為基數,一般為10;distance表示待排序的數組的數字最長的位數;n為數組的長度   public static void lstRadixSort(int a[], int n, int radix, int distance) {     int[] newA = new int[n];//用于暫存數組     int[] count = new int[radix];//用于計數排序,保存的是當前位的值為0 到 radix-1的元素出現的的個數     int divide = 1;     //從倒數第一位處理到第一位     for (int i = 0; i < distance; ++i) {       System.arraycopy(a, 0, newA, 0, n);//待排數組拷貝到newA數組中       Arrays.fill(count, 0);//將計數數組置0       for (int j = 0; j < n; ++j) {         int radixKey = (newA[j] / divide) % radix; //得到數組元素的當前處理位的值         count[radixKey]++;       }       //此時count[]中每個元素保存的是radixKey位出現的次數       //計算每個radixKey在數組中的結束位置,位置序號范圍為1-n       for (int j = 1; j < radix; ++j) {         count[j] = count[j] + count[j - 1];       }       //運用計數排序的原理實現一次排序,排序后的數組輸出到a[]       for (int j = n - 1; j >= 0; --j) {         int radixKey = (newA[j] / divide) % radix;         a[count[radixKey] - 1] = newA[j];         --count[radixKey];       }       divide = divide * radix;     }   } } 

然后測試代碼TestEightAlgorithms.java,代碼如下:

public class TestEightAlgorithms {    public static void printArray(int a[], int n) {     for (int i = 0; i < n; ++i) {       System.out.print(a[i] + " ");       if ( i == n - 1) {         System.out.println();       }     }   }      public static void main(String[] args) {     for (int i = 1; i <= 8; ++i) {       int arr[] = {45, 38, 26, 77, 128, 38, 25, 444, 61, 153, 9999, 1012, 43, 128};       switch(i) {       case 1:         EightAlgorithms.insertSort(arr, arr.length);         break;       case 2:         EightAlgorithms.bubbleSort(arr, arr.length);         break;       case 3:         EightAlgorithms.selectSort(arr, arr.length);         break;       case 4:         EightAlgorithms.shellSort(arr, arr.length);         break;       case 5:         EightAlgorithms.quickSort(arr, arr.length);         break;       case 6:         EightAlgorithms.mergeSort(arr, arr.length);         break;       case 7:         EightAlgorithms.heapSort(arr, arr.length);         break;       case 8:         EightAlgorithms.lstRadixSort(arr, arr.length, 10, 4);         break;       default:         break;       }       printArray(arr, arr.length);     }   } } 

最后是運行結果如下:


以上就是Java實現八個常用的排序算法的全部代碼,希望大家對C++排序算法有更進一步的了解。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品视频二区| 久久夜色精品国产欧美乱| 亚洲free性xxxx护士白浆| 久久精品国产96久久久香蕉| 日韩一区av在线| 欧美亚洲国产精品| 欧美大片欧美激情性色a∨久久| 色婷婷亚洲mv天堂mv在影片| 97成人在线视频| 亚洲欧美日韩网| 日韩欧美成人精品| 欧美亚洲日本网站| 日韩中文字幕在线看| 综合久久五月天| 国产精品日韩欧美| 日韩久久免费电影| 91亚洲va在线va天堂va国| 成人免费午夜电影| 亚洲理论在线a中文字幕| 精品久久久一区二区| 亚洲人a成www在线影院| 国产在线精品一区免费香蕉| 亚洲欧美制服另类日韩| 精品亚洲va在线va天堂资源站| 久久久噜噜噜久久久| 日韩欧美一区二区在线| 国模精品视频一区二区三区| 欧美激情a∨在线视频播放| 国产精品户外野外| 欧美激情国产日韩精品一区18| 亚洲人av在线影院| 亚洲日本中文字幕免费在线不卡| 中文字幕日韩在线观看| 国产精品视频久久久久| 欧美综合第一页| 91成人国产在线观看| 理论片在线不卡免费观看| 久久综合久久88| 中文字幕亚洲一区二区三区五十路| 欧洲午夜精品久久久| 91最新在线免费观看| 久久91亚洲精品中文字幕| 91伊人影院在线播放| 久久精品国产v日韩v亚洲| 久久久久久91香蕉国产| 欧美视频免费在线观看| 欧美做爰性生交视频| 日韩中文字幕国产精品| 亚洲人成免费电影| 国产精品av免费在线观看| 国产精品爱久久久久久久| 97成人精品区在线播放| 久久97久久97精品免视看| 亚洲国产精品久久久久秋霞蜜臀| 国产日韩精品综合网站| 久色乳综合思思在线视频| 91日本在线视频| 亚洲在线免费观看| 国产精品久久久久久久久久尿| 伊人久久久久久久久久| 亚洲成人网在线观看| 9.1国产丝袜在线观看| 国产原创欧美精品| 91精品久久久久久久久青青| 亚洲欧美成人在线| 国产精品va在线播放| 国产美女扒开尿口久久久| 久久久97精品| 伊人久久大香线蕉av一区二区| 国产主播在线一区| 欧美一级片在线播放| 亚洲成人黄色在线观看| 国产a级全部精品| 亚洲精品99久久久久中文字幕| 欧美成人在线网站| 国产在线视频不卡| 最近中文字幕日韩精品| 亚洲韩国青草视频| 亚洲永久在线观看| 亚洲成人av资源网| 国产一区二区三区视频| 久久69精品久久久久久国产越南| 国产免费亚洲高清| 国产精品一区二区三| 日韩电影在线观看免费| 亚洲午夜久久久影院| 久久久精品999| 亚洲精品国偷自产在线99热| 久久99久久久久久久噜噜| 成人看片人aa| 97香蕉超级碰碰久久免费软件| 青青精品视频播放| 欧美色道久久88综合亚洲精品| 久久亚洲国产精品| 国产亚洲一区二区在线| 久久精彩免费视频| 国产第一区电影| 久久久久免费视频| 日韩精品视频在线播放| 久久精视频免费在线久久完整在线看| 日韩精品免费在线观看| 国产日韩欧美中文| 亚洲天堂av电影| 亚洲天堂av电影| 亚洲欧洲美洲在线综合| 日韩在线视频导航| 国产综合久久久久| 国产精品视频大全| 亚洲一区制服诱惑| 免费99精品国产自在在线| 九九热这里只有精品免费看| 国产黑人绿帽在线第一区| 亚洲激情视频在线播放| 中文字幕日本精品| 国产精品免费久久久久影院| 91探花福利精品国产自产在线| 欧美精品第一页在线播放| 日韩免费看的电影电视剧大全| 欧美成在线视频| 亚洲视频国产视频| 久久人人97超碰精品888| 日韩av中文字幕在线播放| 91麻豆国产语对白在线观看| 欧美亚洲视频在线看网址| 69av视频在线播放| 在线精品视频视频中文字幕| 久久精品国产亚洲精品2020| 日本高清+成人网在线观看| 一区二区三区 在线观看视| 亚洲精品一区中文字幕乱码| 亚洲人午夜色婷婷| 日韩精品亚洲视频| 国产精品视频公开费视频| 亚洲性夜色噜噜噜7777| 成人动漫网站在线观看| 亚洲乱码国产乱码精品精天堂| 91免费的视频在线播放| www高清在线视频日韩欧美| 亚洲片国产一区一级在线观看| 国产一区二区三区高清在线观看| 国产在线视频2019最新视频| 国内精品久久影院| 综合av色偷偷网| 欧美性生活大片免费观看网址| 成人综合网网址| 91国产中文字幕| 有码中文亚洲精品| 日韩专区在线播放| 日韩精品视频三区| 国产精品老女人精品视频| 国产精品三级在线| 一本色道久久综合狠狠躁篇怎么玩| 毛片精品免费在线观看| 91亚洲国产成人久久精品网站| 久久久久久久久国产| 日韩精品小视频| 在线成人激情视频| 亚洲激情视频在线观看| 欧美一区二区三区免费视| 国产91精品高潮白浆喷水| 最近2019年中文视频免费在线观看| 日韩中文字幕不卡视频| 国产精品成人一区| 国产亚洲精品一区二555|