交换类排序算法

复习八大基础排序算法。分类:

  1. 插入类(直接插入、希尔排序)
  2. 选择类(直接选择、堆排序)
    3. 交换类(冒泡排序、快速排序)
  3. 归并排序
  4. 还有外部排序(桶排序?)

冒泡排序

public static void bubbleSort(Comparable[] a) {
	for (int i = 0; i < a.length; i++) {
		for (int j = 0; j < a.length - i - 1; j++) {
			if (less(a[j+1], a[j]))	exch(a, j, j+1);
		}
	}
}

快速排序

public static void quickSort(Comparable[] a) {
	StdRandom.shuffle(a);
	quickSort(a, 0, a.length - 1);
}
private static void quickSort(Comparable[] a, int lo, int hi) {
	if (hi <= lo)	return;
	int m = partition(a, lo, hi);
	quickSort(a, lo, m-1);
	quickSort(a, m+1, hi);
}
private static int partition(Comparable[] a, int lo, int hi) {
	int i = lo, j = hi + 1;
	Comparable v = a[lo];
	while(true) {
		while (!less(v, a[++i]))	// 移动左侧指针i,找到需要交换的元素
			if (i == hi)	break;
		while (!less(a[--j], v))	// 移动右侧指针j,找到需要交换的元素
			if (j == lo)	break;
		
		if (i >= j)	break;			// 当两个指针位置交叉时停止移动
		
		exch(a, i, j);			
	}
	
	exch(a, lo, j);					// 把partition元素放到正确位置
	return j;
}
posted @ 2016-04-17 22:41  SmartJuneThx  阅读(169)  评论(0编辑  收藏  举报