成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java實現8種排序算法的示例代碼

瀏覽:8日期:2022-08-31 10:01:26

冒泡排序 O(n2)

兩個數比較大小,較大的數下沉,較小的數冒起來。

public static void bubbleSort(int[] a) { //臨時變量 int temp; //i是循環次數,也是冒泡的結果位置下標,5個數組循環5次 for (int i = 0; i < a.length; i++) { //從最后向前面兩兩對比,j是比較中下標大的值 for (int j = a.length - 1; j > i; j--) {//讓小的數字排在前面if (a[j] < a[j - 1]) { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp;} } } }

選擇排序 O(n2)

在長度為N的無序數組中,第一次遍歷n-1個數,找到最小的數值與第一個元素交換;第二次遍歷n-2個數,找到最小的數值與第二個元素交換;。。。第n-1次遍歷,找到最小的數值與第n-1個元素交換,排序完成。

public static void selectSort(int[] a) { //臨時變量 int temp; //i是循環次數,也是選擇交換的結果的位置下標,5個數組循環5次 for (int i = 0; i < a.length; i++) { //最小值下標 int min = i; for (int j = i + 1; j < a.length; j++) {if (a[min] > a[j]) { min = j;} } temp = a[i]; a[i] = a[min]; a[min] = temp; } }

插入排序 O(n2)

在要排序的一組數中,假定前n-1個數已經排好序,現在將第n個數插到前面的有序數列中,使得這n個數也是排好順序的。如此反復循環,直到全部排好順序。

public static void insertSort(int[] a) { int temp; //i是循環次數,也是插入的隊列的長度,最后一位是a[i] //所以一開始a[0]是排好的一個隊列,比較a.length-1次,最后一次循環是a[a.length-1]插入a[0]~a[a.length-2] for (int i = 0; i < a.length - 1; i++) { //a[j]是要插入的數字,從a[j]往a[0]比較 for (int j = i + 1; j > 0; j--) {//如果插入的數小,交換位置if (a[j] < a[j - 1]) { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp;} else { //因為默認a[0]~a[i]是排好的,a[i+1]比a[i]大的話,就不用比較后面了 break;} } } }

希爾排序 O(n1.5)

在要排序的一組數中,根據某一增量分為若干子序列,并對子序列分別進行插入排序。然后逐漸將增量減小,并重復上述過程。直至增量為1,此時數據序列基本有序,最后進行插入排序。

public static void shellSort(int[] a) { int temp; int d = a.length; for (; ; ) { d = d / 2; //根據差值分組為子序列 for (int k = 0; k < d; k++) {//此時對每組數列進行插入排序,數組為a[k+d],a[k+2d]...a[k+n*d]for (int i = k + d; i < a.length; i += d) { // a[j]是要插入的數字,從a[j]往a[0]比較,跨度為d for (int j = i; j > k; j -= d) { //如果插入的數小,交換位置 if (a[j] < a[j - d]) { temp = a[j]; a[j] = a[j - d]; a[j - d] = temp; } else { //因為默認a[0]~a[i]是排好的,a[i+1]比a[i]大的話,就不用比較后面了 break; } }} } if (d == 1) {break; } } }

快速排序 O(N*logN)

先從數列中取出一個數作為base值;將比這個數小的數全部放在它的左邊,大于或等于它的數全部放在它的右邊;對左右兩個小數列重復第二步,直至各區間只有1個數。

public void quickSort(int a[], int l, int r) { //左邊必須大于右邊 if (l >= r) { return; } int i = l; int j = r; //選擇第一個數為基準 int base = a[l]; while (i < j) { //從右向左找第一個小于base的值,如果大于左移一位,直到找到小值或者i/j重合 while (i < j && a[j] > base) {j--; } //從左向右找第一個大于base的值,如果小于右移一位,直到找到大值或者i/j重合 while (i < j && a[i] < base) {i++; } //交換 if (i < j) {int temp = a[j];a[j] = a[i];a[i] = temp; } } //將基準值放到i右移到的位置 a[i] = base; //將i左邊和i右邊分別排序 quickSort(a, l, i - 1);//遞歸調用 quickSort(a, i + 1, r);//遞歸調用 }

歸并排序 O(N*logN)

歸并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法的一個非常典型的應用。首先考慮下如何將2個有序數列合并。這個非常簡單,只要從比較2個數列的第一個數,誰小就先取誰,取了后就在對應數列中刪除這個數。然后再進行比較,如果有數列為空,那直接將另一個數列的數據依次取出即可。

private static void mergeSort(int[] a, int first, int last, int temp[]) { if (first < last) { //中間值 int middle = (first + last) / 2; //左半部分排序 mergeSort(a, first, middle, temp); //右半部分排序 mergeSort(a, middle + 1, last, temp); //合并左右部分 mergeArray(a, first, middle, last, temp); } } private static void mergeArray(int a[], int first, int middle, int end, int temp[]) { int i = first; int m = middle; int j = middle + 1; int n = end; int k = 0; while (i <= m && j <= n) { if (a[i] <= a[j]) {temp[k] = a[i];k++;i++; } else {temp[k] = a[j];k++;j++; } } while (i <= m) { temp[k] = a[i]; k++; i++; } while (j <= n) { temp[k] = a[j]; k++; j++; } for (int r = 0; r < k; r++) { a[first + r] = temp[r]; } }

堆排序 O(N*logN)

利用堆這種數據結構所設計的一種排序算法。堆是一個近似完全二叉樹的結構,并同時滿足堆積的性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點。

public static void heapSort(int a[]) { //堆頂最大值和數組最后(葉節點)交換 長度-1 次 for (int i = a.length - 1; i > 0; i--) { //構建大頂堆(最大堆) buildHeap(a, i); //堆頂最大值和數組最后(葉節點)交換 swap(a, 0, i); } } //構建大頂堆(最大堆) public static void buildHeap(int a[], int lastIndex) { //排最后的非葉節點為 長度/2-1,從第i檢查到堆頂第0項,上浮大值 for (int i = (lastIndex + 1) / 2 - 1; i >= 0; i--) { //必定存在的左葉節點,不一定存在的右葉節點 int left = i * 2 + 1; int right = i * 2 + 2; //max為左右葉節點中的最大值 int max = left; if (right <= lastIndex) {if (a[left] < a[right]) { max = right;} } //上浮大值 if (a[i] < a[max]) {swap(a, i, max); } } } //交換值 public static void swap(int a[], int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; }

基數排序 O(d(n+r))

【d代表關鍵字有d位,n代表n個記錄,r代表r個空隊列】基數排序(radix sort),相對于常見的比較排序,基數排序是一種分配式排序,即通過將所有數字分配到應在的位置最后再覆蓋到原數組完成排序的過程。

public static void radixSort(int[] a) { //位數 int digit = 1; //作為排序后數組的新下標 int newIndex = 0; //供基數排序使用的二維數組,第一維度固定10位0~9,第二維度根據下標依次存放每次基數排序的結果 int[][] container = new int[10][a.length]; //第一維度每個數組的內容計數,最少為10,防止數組全是個位數時越界,例如五位數組最大值為8,counter.length=5 ,counter[8]就越界 int counterLength = 10; if (a.length > 10) { counterLength = a.length; } int[] counter = new int[counterLength]; //算出數組中最大的值,用來確定最大位 int max = a[0]; int maxDigit = 0; for (int i = 0; i < a.length; i++) { if (a[i] > max) {max = a[i]; } } while (max > 0) { max /= 10; maxDigit++; } //對每位進行排序 while (digit <= maxDigit) { //對每個數值該位取余,container[remainder],并計數該位置上數值的下標counter[remainder] for (int num : a) {int remainder = (num / digit) % 10;container[remainder][counter[remainder]] = num;counter[remainder]++; } //將上一步放入容器的數值依次覆蓋到遠數組中 for (int i = 0; i < 10; i++) {for (int j = 0; j < counter[i]; j++) { a[newIndex] = container[i][j]; newIndex++;}counter[i] = 0; } digit *= 10; newIndex = 0; } }

以上就是Java實現8種排序算法的示例代碼的詳細內容,更多關于Java實現8種排序算法的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91丨porny丨国产| 日韩女优av电影| 91精品国产免费久久综合| 亚洲久本草在线中文字幕| 欧美日韩精品一区二区| 日本va欧美va欧美va精品| 亚洲一区视频| 一区二区三区四区在线免费观看| 激情欧美一区| 国产精品美女久久久久久久久久久 | 精品久久久久av影院| 国产精品99久久久久久久vr| 7777精品伊人久久久大香线蕉的| 国产美女主播视频一区| 欧美男女性生活在线直播观看| 久久99国内精品| 欧美做爰猛烈大尺度电影无法无天| 日本亚洲三级在线| 91福利视频在线| 蜜臀va亚洲va欧美va天堂| 在线欧美日韩国产| 精品一区二区av| 欧美一区日韩一区| 99久久免费国产| 亚洲国产精品传媒在线观看| 欧美日本在线| 国产精品久久久久一区| 亚洲精品精选| 亚洲夂夂婷婷色拍ww47| 一道本成人在线| 黄一区二区三区| 91精品国产品国语在线不卡 | 久久网站免费| 久久激五月天综合精品| 91麻豆精品国产91久久久久久 | 欧美色倩网站大全免费| 激情丁香综合五月| 日韩欧美在线影院| 色综合天天做天天爱| 自拍偷拍欧美激情| 六月婷婷一区| 国产一区美女在线| 久久久久久免费| 欧美日韩四区| 一区二区在线电影| 日本韩国欧美一区| 国产精品99久久久久久宅男| 久久久久久久久久久99999| 亚洲午夜精品福利| 一区二区三区高清| 欧美午夜电影一区| 成人污污视频在线观看| 欧美国产综合一区二区| 国产一区二区三区成人欧美日韩在线观看| 亚洲成av人片在线观看无码| 欧美在线短视频| 成人黄色在线视频| 亚洲天堂福利av| 欧美视频一区二区在线观看| 成人午夜伦理影院| 亚洲三级小视频| 在线视频国产一区| 成人h动漫精品一区二区| 中文字幕乱码日本亚洲一区二区 | 蜜桃久久av| 国产一区二区三区免费播放| 久久久国产精华| 亚洲精品字幕| 经典一区二区三区| 2020国产精品自拍| 国产欧美日本在线| 精品无人区卡一卡二卡三乱码免费卡 | 91免费国产视频网站| 日韩美女视频一区二区 | 亚洲少妇自拍| 紧缚奴在线一区二区三区| 精品国产伦理网| 亚洲看片免费| 精品午夜久久福利影院| 欧美激情一区三区| 国产一区二区精品在线观看| 国产精品电影院| 欧美日韩午夜在线视频| 午夜精品亚洲一区二区三区嫩草| 亚洲成人资源网| 欧美成人欧美edvon| 99香蕉国产精品偷在线观看 | 亚洲免费视频成人| 欧美日韩不卡一区二区| 亚洲最色的网站| 日韩一区二区三区高清免费看看| av成人免费观看| 成人一道本在线| 亚洲在线免费播放| 精品嫩草影院久久| 亚洲一区二区三区免费观看 | 国产精品夜夜夜| 国产jizzjizz一区二区| 亚洲精品日韩一| 欧美一区二区三区免费观看视频 | 欧美福利一区| 美美哒免费高清在线观看视频一区二区| 国产视频一区二区在线观看| 在线观看亚洲精品| 伊人色综合久久天天五月婷| 国产一区二区三区四区在线观看| 亚洲精品免费在线| 精品sm在线观看| 六月婷婷一区| 亚洲视频综合| 国产精品99久久久久| 亚洲国产成人av网| 国产欧美一区二区精品性色超碰 | 在线看日韩精品电影| 亚洲网址在线| 国产999精品久久久久久| 亚洲精品欧美精品| www.视频一区| 精品一区二区三区免费毛片爱| 亚洲欧美日韩小说| 日韩欧美一区二区久久婷婷| 蜜桃av噜噜一区二区三区| 欧美日韩免费精品| 国产精品资源在线| 日韩av一区二区在线影视| 日韩一区在线看| 精品国产免费一区二区三区四区| 欧美主播一区二区三区| 国产欧美日韩综合一区在线播放| 91天堂素人约啪| 国内精品写真在线观看| 亚洲成人av一区二区三区| 中文字幕av资源一区| 欧美大片顶级少妇| 欧美三级韩国三级日本一级| 99精品福利视频| 欧美日韩一区二区三| 成人午夜视频在线观看| 久久er99热精品一区二区| 亚洲成在人线免费| 一区二区三区在线视频观看58| 国产欧美一区二区三区沐欲| 欧美mv日韩mv国产网站app| 欧美美女一区二区在线观看| 色哟哟国产精品免费观看| 国产伦精品一区二区三区照片91| 精品91在线| 国产精品豆花视频| 欧美黄污视频| 99在线视频精品| 国产成人亚洲综合色影视| 美国av一区二区| 日韩精品1区2区3区| 亚洲第一成年网| 一区二区三区四区在线播放| 亚洲三级久久久| 综合色中文字幕| 国产精品美女久久久久久久久 | 蘑菇福利视频一区播放| 国内久久视频| 午夜视频一区| 欧美一区二区三区另类| 99视频一区二区| 成人福利视频在线看| 国产又粗又猛又爽又黄91精品| 免费在线看一区| 日本vs亚洲vs韩国一区三区二区| 亚洲成国产人片在线观看| 亚洲bt欧美bt精品| 亚洲国产一区二区在线播放| 一区二区免费看| 一区二区三区av电影| 亚洲乱码精品一二三四区日韩在线| 中文字幕在线视频一区| 国产视频一区在线观看| 国产欧美一区二区精品仙草咪| 国产精品丝袜在线| 专区另类欧美日韩| 一区二区三区蜜桃网| 亚洲国产另类精品专区| 亚洲电影视频在线| 五月天婷婷综合| 日韩av午夜在线观看| 裸体健美xxxx欧美裸体表演| 久久99久久精品欧美| 国产伦精品一区二区三区在线观看| 国内成人免费视频| 成人免费毛片a| 欧美aⅴ99久久黑人专区| 午夜天堂精品久久久久| 黄色成人在线网址| 一区二区三区四区五区视频| 久久青草久久| 7777女厕盗摄久久久| 欧美一区二区三区免费大片| 久久综合九色欧美综合狠狠 | 夜夜精品浪潮av一区二区三区| 亚洲国产日韩在线一区模特| 视频一区二区中文字幕| 蜜臀国产一区二区三区在线播放|