3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分)
阿新 • • 發佈:2018-12-18
3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現 [分值:20]
您的回答:(空) (簡答題需要人工評分)
package com.interview; /** * 各種排序演算法 */ public class Test3 { public static void main(String[] args) { //用這個來實驗所有的排序演算法 int[] arr = {6, 3, 8, 2, 9, 1}; //用這個再來驗證一下 int[] arr1 = {6, 3, 8, 2, 9, 0, 0, 2, 5, 2, 6, 8, 9, 1}; choice(arr); System.out.println(); choice(arr1); System.out.println(); System.out.println("*****************************"); insert(arr); System.out.println(); insert(arr1); System.out.println(); System.out.println("*******************************"); bubbleSort(arr); System.out.println(); bubbleSort(arr1); System.out.println(); System.out.println("********************************"); } /** * 快速排序 * 應該也不難,但現在不研究,沒必要...(將來研究演算法再進行研究)、 * 快速排序由C. A. R. Hoare在1962年提出。 * 它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分, * 其中一部分的所有資料都比另外一部分的所有資料都要小, * 然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行, * 以此達到整個資料變成有序序列。 */ public static void quick() { } /** * 應該也不難,但現在不研究,沒必要...(將來研究演算法再進行研究)、 * 歸併排序: * 歸併排序(MERGE-SORT)是建立在歸併操作上的一種有效的排序演算法, * 該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。 * 將已有序的子序列合併,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。 * 若將兩個有序表合併成一個有序表,稱為二路歸併。 */ public static void merge() { } /** * 應該也不難,但現在不研究,沒必要...(將來研究演算法再進行研究) * 希爾排序: * 先取一個小於n的整數d1作為第一個增量,把檔案的全部記錄分組。 * 所有距離為d1的倍數的記錄放在同一個組中。先在各組內進行直接插入排序; * 然後,取第二個增量d2<d1重複上述的分組和排序, * 直至所取的增量 =1( < …<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。 */ public static void hill() { } /** * 選擇排序(Selection sort)是一種簡單直觀的排序演算法。 * 它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的一個元素, * 存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。 */ public static void choice(int[] arr) { int temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = i + 1; j < arr.length; j++) { if (arr[j] <= arr[i]) { temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } for (int i : arr) { System.out.print(i + " "); } } /** * 插入排序 * 原理:插入排序的思想是陣列是部分有序的,再將無序的部分插入有序的部分中去 * * @param arr */ public static void insert(int[] arr) { int temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = i + 1; j >= 1; j--) { if (arr[j] < arr[j - 1]) { temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; } } } for (int i : arr) { System.out.print(i + " "); } } /** * 氣泡排序 * 原理:比較兩個相鄰的元素,將值大的元素交換至右端。 */ public static void bubbleSort(int[] arr) { int temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] >= arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (int i : arr) { System.out.print(i + " "); } } }