標籤:java演算法 java
一:插入排序
/* * 插入排序 *//* * 原序列 [12] 15 9 20 6 31 24 * 第0趟 [12 15] 9 20 6 31 24 * 第1趟 [9 12 15] 20 6 31 24 * 第2趟 [9 12 15 20] 6 31 24 * 第3趟 [6 9 12 15 20] 31 24 * n個數,一共需要多少趟?n個數,n-1趟 * 第0趟,把1位置的數,和1位置之前的數進行比較,按大小順序排列 * 第1趟,把2位置的數,和2位置之前的數進行比較,按大小順序排列 ... * 第i趟,把i+1位置的數,和i位置之前的數進行比較,按大小順序排列。 */public class sort01 {public static void main(String[] args) {int[] num = { 3, 4, 1, 6, 3 };for (int i = 0; i < num.length - 1; i++) {for (int j = 0; j < i + 1; j++) { // 第i趟...將i+1位置的數與i+1位置之前的數進行比較// 判斷當前數num[j]與num[i+1]進行比較if (num[i + 1] < num[j]) {int temp = num[i + 1];num[i + 1] = num[j];num[j] = temp;}}}for (int i = 0; i <= num.length - 1; i++) {System.out.println("排序完成後:" + num[i]);}}}
二:選擇排序
/* * 選擇排序 *//* * 以下為簡單選擇排序的儲存狀態,其中大括弧內為無序區,大括弧外為有序序列: * 初始序列:{ 49 27 65 97 76 12 38 } * 第1趟:12與49交換:12 { 27 65 97 76 49 38 } * 第2趟:27不動 :12 27 { 65 97 76 49 38 } * 第3趟:65與38交換:12 27 38 { 97 76 49 65 } * 第4趟:97與49交換:12 27 38 49 { 76 97 65 } * 第5趟:76與65交換:12 27 38 49 65 { 97 76 } * 第6趟:97與76交換:12 27 38 49 65 76 97 */public class sort03 {public static void main(String[] args) {int[] num = { 2, 5, 3, 23, 6, 9, 66 };for (int i = 0; i <= num.length - 1; i++) { // 比較N輪// 找最小int min = num[i]; // 每輪使第一個數最小,依次用後面的比for (int j = i + 1; j <= num.length - 1; j++) {if (min > num[j]) {min = num[j];}}// 判斷下最小的數出現在什麼位置int j;for (j = i; j <= num.length - 1; j++) {if (num[j] == min) {break;}}// j位置為最小值// 交換位置if (j > i) {int temp = num[j];num[j] = num[i];num[i] = temp;}}// 列印for (int i = 0; i <= num.length - 1; i++) {System.out.println(num[i]);}}}
三:冒泡排序
/* * 冒泡排序 */public class sort04 {static void sort() {int[] num = { 2, 1, 3, 5, 4, 7, 2 };for (int i = 0; i < num.length - 1; i++) { // 比較n-1輪for (int j = 0; j < num.length - i - 1; j++) {if (num[j] > num[j + 1]) {int temp = num[j];num[j] = num[j + 1];num[j + 1] = temp;}}}// 列印for (int i = 0; i <= num.length - 1; i++) {System.out.println(num[i]);}}public static void main(String[] args) {sort();}}
四:漢諾塔演算法
/* * 漢諾塔 漢諾塔:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。 * 大梵天創造世界的時候做了三根金剛石砫子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。 * 大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。 * 並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤 * A柱 B柱 C柱 * 64個盤子,由小到大疊放在A柱上, 現在,要求把這64個盤子,從A柱移動到C柱 * 要求:移動過程中,大盤子不能覆蓋小盤子,可以藉助B柱。 * 1個盤子:從A端到C * 2個盤子,把上的小盤子挪到B柱臨時存放,下面的大盤子移動到C柱,再將B柱上臨時存放的小盤子,移動到C柱。 * 3個盤子: 更多盤子怎麼辦? * n個盤子 * a.先把上面的n-1個盤子 從A,藉助C,移動到B * b.把下面一個盤子,從A移動到C * c.把B柱上的n-1個盤子從B藉助A,移動到C 2的64次方-1 次 */public class sort02 {static void hanoi(int n, String src, String mid, String dest) {if (n == 1) {System.out.println(src + "-->" + dest);} else {hanoi(n - 1, src, dest, mid);hanoi(1, src, null, dest);hanoi(n - 1, mid, src, dest);}}public static void main(String[] args) {hanoi(3, "A", "B", "C");}}
Java演算法分析2—————幾種排序&漢諾塔演算法