java的几大排序

import java.util.Arrays;

public class TestSort {
	/**
	 * 冒泡排序 (效率 O(n²),适用于排序小列表。)
	 * 
	 * @param arr
	 *            相邻两两比较
	 */
	public void BubbleSortArray(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr.length - 1; j++) {
				if (arr[j] > arr[j + 1]) {
					int temp;
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
			print(arr);
		}
	}

	/**
	 * 选择排序 (效率O(n²),适用于排序小的列表)
	 * 
	 * @param arr
	 *            从数组中找出最小值,即从0和12345比大小,第一轮循环就能把最小值换到最开头
	 */
	public void SelectSortArray(int[] arr) {
		int min;/* 定义最小值 */
		for (int i = 0; i < arr.length; i++) {
			min = i;
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[min] > arr[j]) {
					min = j;
				}
			}
			if (i != min) {
				int temp = arr[min];
				arr[min] = arr[i];
				arr[i] = temp;
			}
			print(arr);
		}

	}

	/**
	 * 插入排序 (最佳效率O(n);最糟效率O(n²)与冒泡、选择相同,适用于排序小列表 )
	 * 
	 * @param arr
	 *            基本思想:把n个待排序的元素看成一个有序表和一个无序表,开始有序表只包含一个元素
	 *            ,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较
	 *            ,将它插入到有序表中的适当位置,使之成为新的有序表。
	 * 
	 *            若列表基本有序,则插入排序比冒泡、选择更有效率。
	 */
	public void InsertSortArray(int[] arr) {
		for (int i = 1; i < arr.length; i++) {
			int temp = arr[i];// temp标记为未排序第一个元素
			int j = i - 1;
			while (j >= 0 && arr[j] > temp) {
				arr[j + 1] = arr[j];
				j--;
			}
			arr[j + 1] = temp;
		}
		print(arr);
	}

	/**
	 * 希尔排序 (加强版的插入排序)
	 * 
	 * @param arr
	 *            原理:根据需求,如果你想要结果从小到大排列,它会首先将数组进行分组,然后将较小值移到前面,较大值
	 *            移到后面,最后将整个数组进行插入排序,这样比起一开始就用插入排序减少了数据交换和移动的次数,
	 */
	public void ShellSortArray(int[] arr) {
		int j, temp;
		for (int increment = arr.length / 2; increment > 0; increment /= 2) {
			// System.out.println("incre:"+increment);
			for (int i = increment; i < arr.length; i++) {
				temp = arr[i];
				for (j = i; j >= increment; j -= increment) {
					if (temp < arr[j - increment]) {
						arr[j] = arr[j - increment];
					} else {
						break;
					}
				}
				arr[j] = temp;
			}
		}
		print(arr);

	}


	public void print(int[] arr) {
		for (int a : arr) {
			System.out.print(a + "  ");
		}
		System.out.println();
	}

	public static void main(String[] args) {
		int[] arr = { 5, 4, 7, 3, 2, 9, 23, 17 };
		TestSort ts = new TestSort();
		// 0.利用Arrays带有的排序方法快速排序
		// Arrays.sort(arr);
		// ts.print(arr);
		// 1.冒泡排序
		// ts.BubbleSortArray(arr);
		// 2.选择排序
		// ts.SelectSortArray(arr);
		// 3.插入排序
		// ts.InsertSortArray(arr);
		// 4.希尔排序
		//ts.ShellSortArray(arr);
		// 5.归并排序
		// 6.快速排序
		// 7.堆排序
		// 8.拓扑排序
		// 9.竞标赛排序
		// 10.基数排序

	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值