2.1插入排序
扑克牌这个栗子不错。以后得多用扑克牌来形象化思考排序问题。
根据伪代码用java实现插入排序
package com.panjn.java; /** * Created by panjianning on 2016/7/10. */ public class InsertionSort { public static void main(String[] args) { int[] array = new int[]{1, 3, 5, 7, 9, 2, 4, 6, 8, 10}; InsertSort(array); for (int i = 0; i < 10; i++) { System.out.print(array[i] + " "); } } public static void InsertSort(int[] array) { for (int j = 1; j < array.length; j++) { int key = array[j]; //将array[j](key)插入到array[0,...,j-1] int i = j - 1; //寻找合适位置 while (i >= 0 && array[i] > key) { //将a[i]上移 array[i+1] = array[i]; i--; } array[i+1] = key; } } }
循环不变式。。。。。。。
2.2分析算法
RAM模型,输入规模,运行时间(假定第i行的每次执行需要时间Ci), 最坏情况与平均情况分析,增长量级
2.3设计算法
分治法
归并排序 MergeSort
对着伪码用java实现
package com.panjn.java; /** * Created by panjianning on 2016/7/10. */ public class MergeSort { public static void main(String[] args) { int[] array = new int[]{1, 3, 5, 7, 9, 2, 4, 6, 8, 10}; mergeSort(array, 0, 9); for (int i = 0; i < 10; i++) { System.out.print(array[i] + " "); } } /** * 将数组array从start开始到end(包含end)的元素排序 * * @param array * @param start * @param end */ public static void mergeSort(int[] array, int start, int end) { if (start < end) { int mid = (start + end) / 2; mergeSort(array, start, mid); mergeSort(array, mid + 1, end); merge(array, start, mid, end); } } /** * 假定array[start,...,mid] 与 array[mid+1,...,end] 都已经排好序(升序) * 将array[start,...,mid]与array[mid+1,...,end]归并,使得array[start,...,end]为升序 * * @param array * @param start * @param mid * @param end */ public static void merge(int[] array, int start, int mid, int end) { int n1 = mid - start + 1; int n2 = end - mid; int[] L = new int[n1 + 1]; int[] R = new int[n2 + 1]; //将array[start,...,mid]复制到L[0,...,n1-1] System.arraycopy(array, start, L, 0, n1); //将array[mid+1,...,end]复制到R[0,...,n2-1] System.arraycopy(array, mid + 1, R, 0, n2); L[n1] = Integer.MAX_VALUE; R[n2] = Integer.MAX_VALUE; //将L[] 与 R[] 归并到 array[] //扫描L[]的下标,当从L[]中移一个元素到array[]时, i加1 int i = 0; //扫描R[]的下标,当从R[]中移一个元素到array[]时, j加1 int j = 0; for (int k = start; k <= end; k++) { if (L[i] <= R[j]) { array[k] = L[i]; i++; } else { array[k] = R[j]; j++; } } } }
时间: 2024-11-07 11:02:47