日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java實(shí)現(xiàn)8種排序算法的示例代碼

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

冒泡排序 O(n2)

兩個(gè)數(shù)比較大小,較大的數(shù)下沉,較小的數(shù)冒起來(lái)。

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

選擇排序 O(n2)

在長(zhǎng)度為N的無(wú)序數(shù)組中,第一次遍歷n-1個(gè)數(shù),找到最小的數(shù)值與第一個(gè)元素交換;第二次遍歷n-2個(gè)數(shù),找到最小的數(shù)值與第二個(gè)元素交換;。。。第n-1次遍歷,找到最小的數(shù)值與第n-1個(gè)元素交換,排序完成。

public static void selectSort(int[] a) { //臨時(shí)變量 int temp; //i是循環(huán)次數(shù),也是選擇交換的結(jié)果的位置下標(biāo),5個(gè)數(shù)組循環(huán)5次 for (int i = 0; i < a.length; i++) { //最小值下標(biāo) 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)

在要排序的一組數(shù)中,假定前n-1個(gè)數(shù)已經(jīng)排好序,現(xiàn)在將第n個(gè)數(shù)插到前面的有序數(shù)列中,使得這n個(gè)數(shù)也是排好順序的。如此反復(fù)循環(huán),直到全部排好順序。

public static void insertSort(int[] a) { int temp; //i是循環(huán)次數(shù),也是插入的隊(duì)列的長(zhǎng)度,最后一位是a[i] //所以一開始a[0]是排好的一個(gè)隊(duì)列,比較a.length-1次,最后一次循環(huán)是a[a.length-1]插入a[0]~a[a.length-2] for (int i = 0; i < a.length - 1; i++) { //a[j]是要插入的數(shù)字,從a[j]往a[0]比較 for (int j = i + 1; j > 0; j--) {//如果插入的數(shù)小,交換位置if (a[j] < a[j - 1]) { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp;} else { //因?yàn)槟J(rèn)a[0]~a[i]是排好的,a[i+1]比a[i]大的話,就不用比較后面了 break;} } } }

希爾排序 O(n1.5)

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

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

快速排序 O(N*logN)

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

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

歸并排序 O(N*logN)

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

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)

利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。堆是一個(gè)近似完全二叉樹的結(jié)構(gòu),并同時(shí)滿足堆積的性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。

public static void heapSort(int a[]) { //堆頂最大值和數(shù)組最后(葉節(jié)點(diǎn))交換 長(zhǎng)度-1 次 for (int i = a.length - 1; i > 0; i--) { //構(gòu)建大頂堆(最大堆) buildHeap(a, i); //堆頂最大值和數(shù)組最后(葉節(jié)點(diǎn))交換 swap(a, 0, i); } } //構(gòu)建大頂堆(最大堆) public static void buildHeap(int a[], int lastIndex) { //排最后的非葉節(jié)點(diǎn)為 長(zhǎng)度/2-1,從第i檢查到堆頂?shù)?項(xiàng),上浮大值 for (int i = (lastIndex + 1) / 2 - 1; i >= 0; i--) { //必定存在的左葉節(jié)點(diǎn),不一定存在的右葉節(jié)點(diǎn) int left = i * 2 + 1; int right = i * 2 + 2; //max為左右葉節(jié)點(diǎn)中的最大值 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; }

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

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

public static void radixSort(int[] a) { //位數(shù) int digit = 1; //作為排序后數(shù)組的新下標(biāo) int newIndex = 0; //供基數(shù)排序使用的二維數(shù)組,第一維度固定10位0~9,第二維度根據(jù)下標(biāo)依次存放每次基數(shù)排序的結(jié)果 int[][] container = new int[10][a.length]; //第一維度每個(gè)數(shù)組的內(nèi)容計(jì)數(shù),最少為10,防止數(shù)組全是個(gè)位數(shù)時(shí)越界,例如五位數(shù)組最大值為8,counter.length=5 ,counter[8]就越界 int counterLength = 10; if (a.length > 10) { counterLength = a.length; } int[] counter = new int[counterLength]; //算出數(shù)組中最大的值,用來(lái)確定最大位 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++; } //對(duì)每位進(jìn)行排序 while (digit <= maxDigit) { //對(duì)每個(gè)數(shù)值該位取余,container[remainder],并計(jì)數(shù)該位置上數(shù)值的下標(biāo)counter[remainder] for (int num : a) {int remainder = (num / digit) % 10;container[remainder][counter[remainder]] = num;counter[remainder]++; } //將上一步放入容器的數(shù)值依次覆蓋到遠(yuǎn)數(shù)組中 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實(shí)現(xiàn)8種排序算法的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Java實(shí)現(xiàn)8種排序算法的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久成人精品| 麻豆国产一区| 国产精品亚洲人成在99www| 亚洲欧美网站| 亚洲欧美日韩一区在线观看| 亚洲少妇自拍| 国产精品二区影院| 99精品电影| 92国产精品| 狠狠久久婷婷| 亚洲精品1区2区| 日韩高清中文字幕一区| 欧美精品国产一区| 98精品视频| 99国产精品久久久久久久成人热| 日韩欧美美女在线观看| 婷婷综合六月| 日本免费在线视频不卡一不卡二| 欧美1区2区3| 丁香婷婷久久| 日韩精品网站| 日本一不卡视频| 欧美特黄视频| 国产不卡精品| 另类激情亚洲| 国产精品宾馆| 亚洲精品成人| 色综合视频一区二区三区日韩 | 日韩精品一二三四| 蜜臀久久久久久久| 亚洲性色av| 亚州国产精品| 欧美片第1页| 清纯唯美亚洲综合一区| 久久三级福利| 日韩大片免费观看| 国产精品地址| 亚洲天堂黄色| 欧美极品一区二区三区| 亚洲精品麻豆| 亚洲a一区二区三区| 国产精品一级| 久久a爱视频| 日韩中文字幕视频网| 蜜桃视频欧美| 免费在线小视频| 天堂av一区| 免费看精品久久片| 99热精品久久| 涩涩av在线| 久久激情一区| 五月天久久网站| 黄色在线观看www| 免费欧美日韩| 激情五月综合网| 欧美精品九九| 婷婷精品进入| 亚洲国产欧美日本视频| 国产66精品| 亚洲免费福利| 天堂8中文在线最新版在线| 欧美激情aⅴ一区二区三区| 国产精品扒开腿做爽爽爽软件| 蜜桃一区二区三区在线| 日韩专区一卡二卡| 免费美女久久99| 中文字幕av一区二区三区四区| 亚洲国产综合在线看不卡| 国精品产品一区| 国产福利91精品一区二区| 精品久久精品| 日韩一级网站| 国产精品大片免费观看| 国产精品xx| 自拍日韩欧美| 亚洲精品精选| 97人人精品| 蜜臀精品久久久久久蜜臀| 婷婷精品在线| 成人在线视频区| 国产免费成人| 精品五月天堂| 四虎影视精品| 男女精品网站| 免费成人性网站| 免费在线播放第一区高清av| 久久婷婷国产| 中文av在线全新| 欧美日韩日本国产亚洲在线| 亚洲人亚洲人色久| 久久久久久亚洲精品美女| 99tv成人| 日韩精品午夜视频| 久久久久久久久99精品大| 日韩午夜电影| 国产一区二区精品久| 亚洲伦乱视频| 亚洲在线一区| 91中文字幕精品永久在线| 视频一区免费在线观看| 欧美日本不卡高清| 久久中文字幕av一区二区不卡| 先锋亚洲精品| 欧美国产亚洲精品| 亚洲免费成人av在线| 麻豆国产欧美一区二区三区| 国产综合婷婷| 麻豆91精品视频| 亚洲精品第一| 深夜福利视频一区二区| 日本视频一区二区| 亚洲精品2区| 美女精品视频在线| 一区二区亚洲精品| 国产第一亚洲| 三级在线观看一区二区| 免费一级欧美片在线观看网站 | 少妇精品久久久一区二区三区| 美女av一区| 日韩精品三级| 亚洲影视一区| 一区二区三区视频免费观看| 中文无码日韩欧| 午夜久久福利| аⅴ资源天堂资源库在线| 亚洲精品一级| 亚洲一区网站| 久久免费国产| 免费人成在线不卡| 久久国产高清| 蜜桃视频欧美| 99riav国产精品| 国产毛片久久| 一区二区三区网站| 欧美+日本+国产+在线a∨观看| 日本久久精品| 精品网站999| 国产精品mm| 国产白浆在线免费观看| 日韩不卡免费视频| 蜜臀a∨国产成人精品| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩视频精品在线观看| 亚洲综合不卡| 日韩精品一二区| 国产麻豆精品久久| 国产欧美88| 麻豆国产精品一区二区三区 | 在线精品福利| 日本免费新一区视频| 国产欧美三级| 国产精品中文| 国产精品qvod| 国产精品xxx| 午夜久久中文| 美女久久久久| 日韩影院在线观看| 国产精品www994| 蜜桃成人精品| 日本中文字幕一区二区视频| 日本精品一区二区三区在线观看视频| 亚洲精一区二区三区| 久久国产三级精品| 久久婷婷久久| 日韩国产一区二| 给我免费播放日韩视频| 午夜久久免费观看| 日本欧美一区二区| 自由日本语亚洲人高潮| 日韩中文字幕一区二区三区| 欧美一区网站| 久久精品影视| 一区二区三区国产在线| 国产一区二区三区久久 | 欧美不卡在线| 日韩精选在线| 婷婷激情久久| 久久不卡国产精品一区二区| 久久精品不卡| 国产一区成人| 国产精品密蕾丝视频下载| 国产一区亚洲| 麻豆成人91精品二区三区| 亚洲一区欧美| 欧美国产91| 国产91精品对白在线播放| 精品国产乱码久久久久久樱花| 免费日韩一区二区| 日韩欧美一区二区三区免费观看| 亚洲精品进入| 日韩高清电影免费| 国产精品美女久久久| 国产一区二区三区天码| 日本成人中文字幕| 国产在线欧美| 午夜欧美视频| 三上悠亚国产精品一区二区三区 | 天堂资源在线亚洲| 国产欧美日韩影院| 亚洲人成在线影院|