标签:
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++;
}
}
}
}
标签:
原文地址:http://www.cnblogs.com/mmyz-sysu-panjn/p/intro-Algorithm-Chapter2.html