日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

八大排序算法的java实现

發布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 八大排序算法的java实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
八大排序算法的java實現

有時間再貼算法分析圖

JDK7的Collections.sort()的算法是TimSort, 適應性的歸并排序, 比較晦澀難懂, 這里沒有實現

public class mySort {// 冒泡排序public static void myBubbleSort(int[] array) {int lastExchange = array.length - 1; //記錄最后交換位置, 避免重復比較for (int i = lastExchange - 1; i >= 0; --i) {for (int j = 0; j <= i; ++j) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;lastExchange = j; //特性:最后交互位置后的元素已經有序 }}}}// 插入排序public static void myInsertSort(int[] array) {for (int i = 1; i <= array.length - 1; ++i) {int temp = array[i];int j = 0; // 給值移位并尋找插入點for (j = i - 1; j >= 0 && array[j] > temp; --j) {array[j + 1] = array[j];}array[j + 1] = temp;}}// 選擇排序public static void mySelectSort(int[] array) {for (int i = 0; i < array.length - 1; ++i) {int minIndex = i;// 每次選出一極值for (int j = i + 1; j <= array.length - 1; ++j) {if (array[j] < array[minIndex]) {minIndex = j;}}// 極值歸位if (minIndex != i) {int temp = array[minIndex];array[minIndex] = array[i];array[i] = temp;}}}// 希爾排序public static void myShellSort(int[] array) {int gap = 5;while (gap != 0) {//不必刻意分組, 組1->組2->組1->組2...輪流處理for (int j = gap; j <= array.length - 1; ++j) {int temp = array[j];int k = 0;for (k = j - gap; k >= 0 && array[k] > temp; k -= gap) {array[k + gap] = array[k];}array[k + gap] = temp;}gap /= 2; //重新分組 }}// 快速排序public static void myQuickSort(int[] array) {myQuickSortCore(array, 0, array.length - 1);}private static void myQuickSortCore(int[] array, int left, int right) {if (left >= right) { //遞歸出口return;}int mLeft = left;int mRight = right;int base = array[mLeft]; //第一個元素作為基準, left空位可占while(mLeft != mRight) {while (mRight > mLeft && array[mRight] >= base) {--mRight;}array[mLeft] = array[mRight]; //right可覆蓋while (mRight > mLeft && array[mLeft] <= base) {++mLeft;}array[mRight] = array[mLeft];}array[mRight] = base; //基準元素歸位, l=r myQuickSortCore(array, left, mLeft - 1); //遞歸基準以左myQuickSortCore(array, mRight + 1 , right); //遞歸基準以右 }// 歸并排序public static void myMergeSort(int[] array) {// 每個分組中有兩個來自上層迭代的有序組, gap為有序組長度, 2 * gap為分組長度for (int gap = 1; gap < array.length; gap *= 2) {int i = 0; // array下標// 分組并內部排序while (i + 2 * gap - 1 < array.length) {mergePiece(array, i, i + gap - 1, i + 2 * gap - 1);i += 2 * gap;}// 分組剩余部分排序, 只有超過一個gap才有內部排序的意義if (i + gap - 1 < array.length) {mergePiece(array, i, i + gap - 1, array.length - 1);}}}// 將array中有序的兩段piecewise1 和 piecewise2 合并成整體有序public static void mergePiece(int[] array, int head, int mid, int tail) {int i = head; // piecewise1下標 [head, mid]int j = mid + 1; // piecewise2下標 [mid + 1, tail]// 臨時數組, 保存結果int[] arrayTemp = new int[tail - head + 1]; // combineint k = 0; // combine下標while (i <= mid && j <= tail) {if (array[i] <= array[j]) {arrayTemp[k] = array[i];++i;++k;} else {arrayTemp[k] = array[j];++j;++k;}}// 復制多余部分 piecewise1while (i <= mid) {arrayTemp[k] = array[i];++i;++k;}// 復制多余部分 piecewise2while (j <= tail) {arrayTemp[k] = array[j];++j;++k;}// 結果復制到原始數組k = 0;i = head; // 重置下標, i piecewise1 + piecewise2while (i <= tail) {array[i] = arrayTemp[k];++i;++k;}}// 堆排序public static void myHeapSort(int[] array) {// 調整堆->大頂堆for (int i = array.length / 2 - 1; i >= 0; --i) { // 從最后非葉子節點開始 adjustHeap(array, i, array.length);}// 調整堆->交換堆頂/末位元素for (int j = array.length - 1; j > 0; --j) {int temp = array[0];array[0] = array[j];array[j] = temp;adjustHeap(array, 0, j); // 只需調整堆頂父節點 }}// 調整為大頂堆分布, node為父節點下標, adjustLen為涉及調整的長度(為排序使用)private static void adjustHeap(int[] array, int node, int adjustLen) {int temp = array[node]; // 拿出node形成可占空位for (int i = node * 2 + 1; i < adjustLen; i = node * 2 + 1) {if (i + 1 < adjustLen && array[i] < array[i + 1]) {++i; // 得到最大子節點 }if (array[i] > temp) {array[node] = array[i];node = i; // 為下一層迭代更新父節點node, 最后為葉子} else {break;}}array[node] = temp;}// 基數排序public static void myRadixSort(int[] array) {int d = maxBit(array);int dec = 1; //進制迭代final int R = 10; //桶個數int[] tempArray = new int[array.length]; //臨時數組, 代替桶存儲數組, 代價是需記錄下標/數量來分割桶int[] bucketCapacity = new int[R]; //桶計數 for (int i = 1; i <= d; ++i) {for (int j = 0; j < R; ++j) {bucketCapacity[j] = 0; //清空桶容量 }//計數1for (int j = 0; j < array.length; ++j) {int k = array[j] / dec % R; ++bucketCapacity[k];}//計數2 變累計, 為分割for (int j = 1; j < R; ++j) {bucketCapacity[j] = bucketCapacity[j - 1] + bucketCapacity[j];}// 存儲進桶for (int j = array.length - 1; j >= 0; --j) {int k = array[j] / dec % R; tempArray[bucketCapacity[k] - 1] = array[j];--bucketCapacity[k]; }// 寫出for(int j = 0; j < array.length; ++j) {array[j] = tempArray[j];}// 下一位dec *= 10;}}//求數組元素的最大位數private static int maxBit(int[] array) {int bit = 1;int dec = 10;for (int i = 0; i < array.length; ++i) {while (array[i] >= dec) {++bit;dec *= 10;}}return bit;} }

?

posted on 2017-04-09 16:57 myJavaEE 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/myJavaEE/p/6685445.html

總結

以上是生活随笔為你收集整理的八大排序算法的java实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品国产一区二区视频 | av资源网在线观看 | 日韩美一区二区 | 国产成人tv | 中文字幕欧美激情 | 精品一区二区三区电影 | 成人日批 | 亚洲人精品午夜射精日韩 | 人人草人人爽 | 中文字幕一区二区人妻痴汉电车 | 欧美性jizz18性欧美 | 97色伦影院 | 久久久香蕉视频 | 影音先锋每日资源 | 青青青草视频在线观看 | 一级黄色片免费看 | 欧美性xxxxxxxxx | 男女男精品视频站 | 日本男人的天堂 | 国产精品美女一区 | 亚洲专区一区 | www.xxx国产| 春色激情站 | 黄色日批| 国产尤物网站 | 国产在线欧美日韩 | 成人在线观看一区二区 | 国产久视频 | 在线免费观看 | 插插射射 | 国产丰满农村老妇女乱 | 国产91在线播放 | 成人吃奶视频 | 国产香蕉av | 不卡在线播放 | 免费在线看a | 在线观看av一区 | 人人干干 | 成人午夜网址 | 久久91av| 欧美性猛交aaaa片黑人 | 毛片福利| 亚洲不卡影院 | 亚洲少妇18p | 熟妇人妻av无码一区二区三区 | 日本黄色xxx | 精品人妻一区二区三区含羞草 | 欧美日韩高清一区二区 | 天天曰天天干 | 精品日韩一区二区三区 | 91嫩草影视 | 青青草国产 | www.视频一区 | 国产一级视频在线观看 | 久久av秘一区二区三区 | 成人免费网站在线观看 | 激情综合网av| 日日摸天天爽天天爽视频 | 美国福利片 | 亚洲av无码乱码国产麻豆 | 日韩午夜av| 国产精品一卡二卡三卡 | 欧美精品乱码99久久蜜桃 | 亚洲精品国产精华液 | 久久高清av | 少妇视频| 天天操人人 | 日韩簧片在线观看 | 在线中文字幕网站 | 中文字幕在线一区 | 丰腴饱满的极品熟妇 | 成人动漫免费在线观看 | 天堂va欧美va亚洲va老司机 | 久久精品999 | 精品麻豆视频 | 免费的av网站 | 欧美成人精品一区 | 69激情网| 欧美日韩一二三 | 国产中文一区 | 久久两性视频 | 影音先锋国产在线 | 91精产国品一二三区在线观看 | 日本特黄一级大片 | 国产一区免费在线观看 | 中文字幕人妻伦伦 | 午夜亚洲国产 | 综合 欧美 亚洲日本 | 精品一区二区三区av | 久久97| www成人免费视频 | 欧美亚洲综合另类 | 国产一区二区三区视频在线 | 三级全黄的视频 | 亚洲精品久久久中文字幕 | 91嫩草视频在线观看 | 久久国产99| 欧美日韩国产精品一区 | 一级中国毛片 |