JAVA 排序算法汇总

public class 插入排序 extends Common {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] a = new int[]{7, 87, 9, 1, 22,12,18};
		insertSort(a);
		print(a);
	}

	public static void insertSort(int[] a){
		if(a == null){
			return;
		}
		
		for(int i = 1; i < a.length; i++){
			for(int j = i; j >= 1; j--){
				if(a[j] < a[j-1]){
					swap(a, j-1 ,j);
				}else{
					break;
				}
			}
		}
	}
}

public class 堆排序 extends Common {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] a = new int[]{7, 87, 9, 1, 22,12,18};
		headSort(a);
		print(a);
	}

	public static void adjust(int[] a, int index, int size) {
		int left = 2 * index + 1;
		int right = 2 * index + 2;
		int maxIndex = index;
		if (left < size && a[maxIndex] < a[left]) {
			maxIndex = left;
		}
		if (right < size && a[maxIndex] < a[right]) {
			maxIndex = right;
		}
		if (maxIndex != index) {
			swap(a, index, maxIndex);
			adjust(a, maxIndex, size);
		}
	}

	public static void buildHead(int[] a, int size) {
		int i = size / 2 - 1;
		for (; i >= 0; i--) {
			adjust(a, i, size);
		}
	}

	public static void headSort(int[] a) {
		int size = a.length;
		for (; size > 1; size--) {
			buildHead(a, size);
			swap(a, 0, size-1);
		}
	}

}

public class 归并排序 extends Common{

	public static void main(String[] args) {
		int[] a = new int[] { 7, 87, 9, 1, 22, 12, 18 };
		sort(a, 0, a.length-1);
		print(a);
		
	}
	
	public static void sort(int[] a, int left, int right){
		if(a == null || left >= right){
			return;
		}
		int mid = (left + right)/2;
		sort(a, left, mid);
		sort(a, mid+1, right);
		merge(a, left, mid, right);
	}
	public static void merge(int[] a, int left, int mid, int right){
		int[] mergeArray = new int[right - left + 1];
		int i = left;
		int j = mid + 1;
		int k = 0;
		while(i <= mid && j <= right){
			if(a[i] <= a[j]){
				mergeArray[k++] = a[i++];
			}else{
				mergeArray[k++] = a[j++];
			}
		}
		while(i <= mid){
			mergeArray[k++] = a[i++];
		}
		while(j <= right){
			mergeArray[k++] = a[j++];
		}
		for(int p = 0; p < right - left + 1; p++){
			a[p+left] = mergeArray[p];
		}
	}
}

public class 快速排序 extends Common {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] a = new int[]{7, 87, 9, 1, 22,12,18};
		fastSort(a, 0, a.length-1);
		print(a);
	}
	
	public static void fastSort(int[] a, int left, int right){
		if(a == null || left >= right){
			return;
		}
		int i = left, j = right;
		int base = a[i];
		
		while(i < j){
			while(i < j && a[j] >= base){
				j--;
			}
			while(i < j && a[i] <= base){
				i++;
			}
			if(i < j){
				swap(a, i, j);
			}
		}
		swap(a, i, left);
		fastSort(a, left, i-1);
		fastSort(a, i+1, right);
	}

}

public class 冒泡排序 extends Common {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] a = new int[] { 7, 87, 9, 1, 22, 12, 18 };
		bubbleSort(a);
		print(a);
	}

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

public class 选择排序  extends Common {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] a = new int[]{7, 87, 9, 1, 22,12,18};
		selectSort(a);
		print(a);
	}
	
	public static void selectSort(int[] a){
		if(a == null){
			return;
		}
		int length = a.length;
		for(int i = 0; i < length-1; i++){
		   int minIndex = i;
		   int min = a[i];
		   for(int j = i+1; j < length; j++){
			   if(a[j] < min){
				   min = a[j];
				   minIndex = j;
			   }
		   }
		   swap(a, i, minIndex);
		}
	}
}

外排序:

http://www.cnblogs.com/HappyXie/archive/2012/08/29/2662624.html

http://blog.csdn.net/jethai/article/details/52345310

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值