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

首頁 > 編程 > Java > 正文

常用Java排序算法詳解

2020-01-31 16:50:29
字體:
來源:轉載
供稿:網友

一、選擇排序(SelectSort)

基本原理:對于給定的一組記錄,經過第一輪比較后得到最小的記錄,然后將該記錄與第一個記錄的位置進行交換;接著對不包括第一個記錄以外的其他記錄進行第二次比較,得到最小的記錄并與第二個記錄進行位置交換;重復該過程,直到進行比較的記錄只有一個為止。

public class SelectSort { public static void selectSort(int[] array) { int i; int j; int temp; int flag; for (i = 0; i < array.length; i++) { temp = array[i]; flag = i; for (j = i + 1; j < array.length; j++) { if (array[j] < temp) {  temp = array[j];  flag = j; } } if (flag != i) { array[flag] = array[i]; array[i] = temp; } } } public static void main(String[] args) { int[] a = { 5, 1, 9, 6, 7, 2, 8, 4, 3 }; selectSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } }}

二、插入排序(InsertSort)

基本原理:對于給定的一組數據,初始時假設第一個記錄自成一個有序序列,其余記錄為無序序列。接著從第二個記錄開始,按照記錄的大小依次將當前處理的記錄插入到其之前的有序序列中,直至最后一個記錄插入到有序序列中為止。

public class InsertSort { public static void insertSort(int[] a) { if (a != null) { for (int i = 1; i < a.length; i++) { int temp = a[i]; int j = i; if (a[j - 1] > temp) {  while (j >= 1 && a[j - 1] > temp) {  a[j] = a[j - 1];  j--;  } } a[j] = temp; } } } public static void main(String[] args) { int[] a = { 5, 1, 7, 2, 8, 4, 3, 9, 6 }; // int[] a =null; insertSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } }}

三、冒泡排序(BubbleSort)

基本原理:對于給定的n個記錄,從第一個記錄開始依次對相鄰的兩個記錄進行比較,當前面的記錄大于后面的記錄時,交換位置,進行一輪比較和換位后,n個記錄中的最大記錄將位于第n位;然后對前(n-1)個記錄進行第二輪比較;重復該過程直到進行比較的記錄只剩下一個為止。

public class BubbleSort { public static void bubbleSort(int array[]) { int temp = 0; int n = array.length; for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < i; j++) { if (array[j] > array[j + 1]) {  temp = array[j];  array[j] = array[j + 1];  array[j + 1] = temp; } } } } public static void main(String[] args) { int a[] = { 45, 1, 21, 17, 69, 99, 32 }; bubbleSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } }}

四、歸并排序(MergeSort)

基本原理:利用遞歸與分治技術將數據序列劃分成為越來越小的半子表,再對半子表排序,最后再用遞歸方法將排好序的半子表合并成為越來越大的有序序列。對于給定的一組記錄(假設共有n個記錄),首先將每兩個相鄰的長度為1的子序列進行歸并,得到n/2(向上取整)個長度為2或1的有序子序列,再將其兩兩歸并,反復執行此過程,直到得到一個有序序列。

public class MergeSort { public static void merge(int array[], int p, int q, int r) { int i, j, k, n1, n2; n1 = q - p + 1; n2 = r - q; int[] L = new int[n1]; int[] R = new int[n2]; for (i = 0, k = p; i < n1; i++, k++) L[i] = array[k]; for (i = 0, k = q + 1; i < n2; i++, k++) R[i] = array[k]; for (k = p, i = 0, j = 0; i < n1 && j < n2; k++) { if (L[i] > R[j]) { array[k] = L[i]; i++; } else { array[k] = R[j]; j++; } } if (i < n1) { for (j = i; j < n1; j++, k++) array[k] = L[j]; } if (j < n2) { for (i = j; i < n2; i++, k++) { array[k] = R[i]; } } } public static void mergeSort(int array[], int p, int r) { if (p < r) { int q = (p + r) / 2; mergeSort(array, p, q); mergeSort(array, q + 1, r); merge(array, p, q, r); } } public static void main(String[] args) { int a[] = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 }; mergeSort(a, 0, a.length - 1); for (int j = 0; j < a.length; j++) { System.out.print(a[j] + " "); } }}

五、快速排序(QuickSort)

基本原理:對于一組給定的記錄,通過一趟排序后,將原序列分為兩部分,其中前一部分的所有記錄均比后一部分的所有記錄小,然后再依次對前后兩部分的記錄進行快速排序,遞歸該過程,直到序列中的所有記錄均有序為止。

public class QuickSort { public static void sort(int array[], int low, int high) { int i, j; int index; if (low >= high) return; i = low; j = high; index = array[i]; while (i < j) { while (i < j && index <= array[j]) j--; if (i < j) array[i++] = array[j]; while (i < j && index > array[i]) i++; if (i < j) array[j--] = array[i]; } array[i] = index; sort(array, low, i - 1); sort(array, i + 1, high); } public static void quickSort(int array[]) { sort(array, 0, array.length - 1); } public static void main(String[] args) { int a[] = { 5, 8, 4, 6, 7, 1, 3, 9, 2 }; quickSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } }}

六、希爾排序(ShellSort)

基本原理:先將待排序的數組元素分成多個子序列,使得每個子序列的元素個數相對減少,然后對各個子序列分別進行直接插入排序,待整個待排序序列"基本有序后",最后再對所有元素進行一次直接插入排序。

public class ShellSort { public static void shellSort(int[] a) { int len = a.length; int i, j; int h; int temp; for (h = len / 2; h > 0; h = h / 2) { for (i = h; i < len; i++) { temp = a[i]; for (j = i - h; j >= 0; j -= h) {  if (temp < a[j]) {  a[j + h] = a[j];  } else  break; } a[j + h] = temp; } } } public static void main(String[] args) { int a[] = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 }; shellSort(a); for (int j = 0; j < a.length; j++) { System.out.print(a[j] + " "); } }}

七、最小堆排序(MinHeapSort)

基本原理:對于給定的n個記錄,初始時把這些記錄看作一顆順序存儲的二叉樹,然后將其調整為一個小頂堆,然后將堆的最后一個元素與堆頂元素進行交換后,堆的最后一個元素即為最小記錄;接著講前(n-1)個元素重新調整為一個小頂堆,再將堆頂元素與當前堆的最后一個元素進行交換后得到次小的記錄,重復該過程直到調整的堆中只剩一個元素時為止,該元素即為最大記錄,此時可得到一個有序序列。

public class MinHeapSort { public static void adjustMinHeap(int[] a, int pos, int len) { int temp; int child; for (temp = a[pos]; 2 * pos + 1 <= len; pos = child) { child = 2 * pos + 1; if (child < len && a[child] > a[child + 1]) child++; if (a[child] < temp) a[pos] = a[child]; else break; } a[pos] = temp; } public static void myMinHeapSort(int[] array) { int i; int len = array.length; for (i = len / 2 - 1; i >= 0; i--) { adjustMinHeap(array, i, len - 1); } for (i = len - 1; i >= 0; i--) { int tmp = array[0]; array[0] = array[i]; array[i] = tmp; adjustMinHeap(array, 0, i - 1); } } public static void main(String[] args) { int[] a = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 }; myMinHeapSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } }}

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合伊人色综合网站| 精品久久久久久亚洲国产300| 国产精品毛片a∨一区二区三区|国| 国产精品一久久香蕉国产线看观看| 日韩欧美亚洲一二三区| 国产欧美一区二区三区久久| 亚洲综合中文字幕在线| 成人国内精品久久久久一区| 2021国产精品视频| 久久伊人精品天天| 成人免费看片视频| 日韩高清a**址| 日韩福利视频在线观看| 久久中文字幕国产| 成人免费观看49www在线观看| 国产午夜精品美女视频明星a级| 亚洲美女激情视频| 色偷偷av亚洲男人的天堂| 国内精品在线一区| 国产福利精品av综合导导航| 中日韩美女免费视频网址在线观看| 色哟哟入口国产精品| 精品视频在线观看日韩| 亚洲天堂网站在线观看视频| 国产欧美亚洲精品| 性色av一区二区三区红粉影视| 97成人精品区在线播放| 亚洲国产欧美一区二区丝袜黑人| 国产精品第1页| 国产成+人+综合+亚洲欧洲| 亚洲成人av在线| 欧美日本啪啪无遮挡网站| 国内精品一区二区三区| 欧美在线观看www| 91久久精品一区| 成人福利免费观看| 国产精品18久久久久久麻辣| 久99九色视频在线观看| 国产精品国产福利国产秒拍| 91最新在线免费观看| 国产精品美乳在线观看| 日本欧美在线视频| 久久综合久久美利坚合众国| 亚洲大胆人体在线| 国产精品91在线观看| 亚洲一区久久久| 91av在线看| 久久国产精品99国产精| 亚洲偷欧美偷国内偷| 欧美成人午夜激情在线| 91精品久久久久| 在线观看日韩欧美| 欧美另类老女人| 这里精品视频免费| 欧美久久久精品| 亚洲第一福利在线观看| 欧美裸身视频免费观看| 亚洲免费电影一区| 日韩经典中文字幕在线观看| 中文字幕日韩欧美精品在线观看| 国产精品天天狠天天看| 欧美激情videoshd| 狠狠躁18三区二区一区| 97涩涩爰在线观看亚洲| 久久久久久com| 国产精品久久久久久久久久久不卡| 亚洲国产精彩中文乱码av| 中文字幕在线视频日韩| 亚洲国产精品久久久| 国语自产精品视频在免费| 久久九九有精品国产23| 亚洲欧美色婷婷| 欧美色欧美亚洲高清在线视频| 国模视频一区二区三区| 国产91精品久| 欧美成人精品h版在线观看| 亚洲国产成人精品女人久久久| 日韩电影视频免费| 美女啪啪无遮挡免费久久网站| 亚洲永久在线观看| 日韩视频在线免费观看| 中文字幕日韩欧美| 成人欧美一区二区三区黑人孕妇| 国外成人在线播放| 亚洲国产成人91精品| xvideos成人免费中文版| 性视频1819p久久| 69久久夜色精品国产69| 国内精品一区二区三区四区| 欧美一级大片视频| 亚洲欧美精品中文字幕在线| 91精品国产91久久久久久| 精品香蕉一区二区三区| 日韩电影在线观看永久视频免费网站| 亚洲精品中文字幕女同| 91精品国产高清自在线看超| 68精品国产免费久久久久久婷婷| 亚洲第一色在线| 久久免费国产视频| 成人免费午夜电影| 国产午夜精品久久久| 亚洲精品自在久久| 日韩精品在线私人| 国产日本欧美视频| 国产欧美精品久久久| 中文字幕九色91在线| 一级做a爰片久久毛片美女图片| 第一福利永久视频精品| 九九热精品在线| www国产91| 色偷偷噜噜噜亚洲男人| 欧美激情一级欧美精品| 亚洲黄在线观看| 欧美午夜美女看片| 欧美一区二区.| 亚洲大胆人体视频| 国产在线视频不卡| 国产在线日韩在线| 国产中文字幕91| yellow中文字幕久久| 91久久久久久久久久久| 成人久久18免费网站图片| 国产精品成人aaaaa网站| 久久精品2019中文字幕| 色狠狠久久aa北条麻妃| 久久乐国产精品| 国产精品日韩专区| 欧美大片网站在线观看| 久久久久久久国产精品视频| 亚洲天堂男人天堂女人天堂| 欧美国产日韩一区二区在线观看| 91av视频在线免费观看| 欧美大片va欧美在线播放| 久久综合色影院| 日本精品va在线观看| 欧美日韩裸体免费视频| 97国产精品人人爽人人做| 国产色视频一区| 国产成人精品在线视频| 91chinesevideo永久地址| 日韩精品在线免费观看| 一个人看的www久久| 亚洲аv电影天堂网| 中文字幕久久久av一区| 亚洲另类图片色| 成人免费大片黄在线播放| 精品久久久久久久大神国产| 在线电影av不卡网址| 欧美精品在线看| 久久香蕉国产线看观看网| 日韩国产高清视频在线| 亚洲图片制服诱惑| 国产精品综合网站| 久久精品99久久久久久久久| 亚洲成人三级在线| 国产91在线播放| 欧美成人精品在线观看| 欧美色道久久88综合亚洲精品| 国产ts人妖一区二区三区| 色偷偷9999www| 久久免费精品日本久久中文字幕| 亚洲成人网在线观看| 91在线|亚洲| 中文字幕精品视频|