檢視動畫學習演算法和資料結構(一)()
阿新 • • 發佈:2019-02-08
轉載請註明原出處:http://blog.csdn.net/lrs123123/article/details/43114619
這是一個寫給自己複習溫習的博文,不喜勿噴
一、排序板塊
①氣泡排序(BubbleSort)
動畫展示:
java程式碼:
public class BubbleSort { public static void main(String[] args) { int unsortNums[] = { 3, 12, 17, 33, 2, 14, 1}; System.out.println("\n最終結果:"+Arrays.toString(BubbleSort(unsortNums))); } public static int[] BubbleSort(int[] arr){ int temp; for(int i=0; i < arr.length-1; i++){ for(int j=1; j < arr.length-i; j++){ if(arr[j-1] > arr[j]){ temp=arr[j-1]; arr[j-1] = arr[j]; arr[j] = temp; } } System.out.println((i+1)+"th 排序結果: "+Arrays.toString(arr)); } return arr; } }
Eclipse執行結果
②選擇排序(SelectSort)
動畫展示:
java程式碼:
public class SelectSort { public SelectSort() { }; // 無參構造 public static int[] selectSort(int[] attr) { // 返回int陣列的構造 for (int i = 0; i < attr.length - 1; i++) { int smallNum = i; for (int j = i + 1; j < attr.length; j++) { if (attr[j] < attr[smallNum]) { smallNum = j; } } int temp = attr[i]; attr[i] = attr[smallNum]; attr[smallNum] = temp; System.out.println((i + 1) + "th 排序結果: " + Arrays.toString(attr)); } return attr; } public static void main(String[] args) { SelectSort selectSort = new SelectSort(); int[] unsortNums = { 3, 12, 17, 33, 2, 14, 1 }; System.out.println("\n最終結果:" + Arrays.toString(selectSort(unsortNums))); } }
Eclipse執行結果
③插入排序(InsertionSort)
動畫展示:
java程式碼:
public class InsertionSort { public static void main(String[] args) { int[] unsortNums = { 4, 2, 9, 6, 23, 12, 34, 0, 1 }; insertionSort(unsortNums); } private static int [] printNumbers(int[] input) { for (int i = 0; i < input.length; i++) { } return input; } public static void insertionSort(int array[]) { int n = array.length; for (int j = 1; j < n; j++) { int key = array[j]; int i = j - 1; while ((i > -1) && (array[i] > key)) { array[i + 1] = array[i]; i--; } array[i + 1] = key; printNumbers(array); System.out.println("第"+(j-1) + "次排序結果: " + Arrays.toString(array)); } System.out.println("\n最終結果:" + Arrays.toString(printNumbers(array))); } }
Eclipse執行結果
③歸併排序(MergeSort)
動畫展示:
java程式碼:
public class MergeSort {
private int[] array;
private int[] tempMergArr;
private int length;
private void mergeParts(int lowerIndex, int middle, int higherIndex) {
for (int i = lowerIndex; i <= higherIndex; i++) {
tempMergArr[i] = array[i];
}
int i = lowerIndex;
int j = middle + 1;
int k = lowerIndex;
while (i <= middle && j <= higherIndex) {
if (tempMergArr[i] <= tempMergArr[j]) {
array[k] = tempMergArr[i];
i++;
} else {
array[k] = tempMergArr[j];
j++;
}
k++;
}
while (i <= middle) {
array[k] = tempMergArr[i];
k++;
i++;
}
System.out.println("第"+(j-1) + "次排序結果: " + Arrays.toString(array));
}
public static void main(String a[]) {
int[] inputArr = { 45, 23, 11, 89, 77, 98, 4, 28, 65, 43 };
MergeSort mms = new MergeSort();
mms.sort(inputArr);
for (int i : inputArr) {
}
System.out.println("\n最終結果:" + Arrays.toString(inputArr));
}
public void sort(int inputArr[]) {
this.array = inputArr;
this.length = inputArr.length;
this.tempMergArr = new int[length];
doMergeSort(0, length - 1);
}
private void doMergeSort(int lowerIndex, int higherIndex) {
if (lowerIndex < higherIndex) {
int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
// 先排序左半部分陣列
doMergeSort(lowerIndex, middle);
// 排序右半部分陣列
doMergeSort(middle + 1, higherIndex);
// 合起來排序額哈哈
mergeParts(lowerIndex, middle, higherIndex);
}
}
}
Eclipse執行結果
//2015/2/23第二次更新
還有棧,陣列,樹,連結串列,佇列,圖,二分分配,網路流等需要以後慢慢學習,先到這 2015-2-23