常用排序(java)

93 阅读1分钟

1,冒泡排序

代码实现

第一步:从arr[0]开始,最大值冒泡到arr[n-1];

第二步:从arr[0]开始,最大值冒泡到arr[n-2];

以此类推

public class MaoPao {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// int[] arr = { 4, 3, 2, 1, 0 };
		int[] arr = { 0, 4, 2, 2, 4 };
		int temp = 0;
		Boolean flag = true;
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = 0; j < arr.length - 1 - i; j++) {
				if (arr[j] > arr[j + 1]) {
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
					flag = false;
				}
			}
			if (flag) {
				break;//一次都没有替换说明已经排好顺序了
			} else {
				flag = true;
			}

		}
		//输出验证
		for (int i : arr) {
			System.out.println(i);
		}

	}

}

2,选择排序

第一步:从arr[0]到arr[n-i]中选择最小的,跟arr[0]做交换

第二步:从arr[1]到arr[n-1]中选择最小的,跟arr[1]做交换

以此类推

代码实现

public static void Select(int[] arr) {
		
		for(int i=0; i<arr.length-1; i++) {
			int min = arr[i];
			int minIndex = i;
			for(int j=0+i; j<arr.length; j++) {
				if(arr[j]<arr[minIndex]) {
					min = arr[j];
					minIndex = j;
				}
			}
                        //如果不相等说明arr[i]不是最小值,需要跟最小值做交换
			if(minIndex!=i) {
				arr[minIndex] = arr[i];
				arr[i] = min;
			}
		}
		
	}

测试数据

80000个数需要两秒左右

public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = new int [80000];
		for(int i =0; i<80000; i++) {
			arr[i] = (int)(Math.random()*80000);
		}
		SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println(s.format(new Date()));
		Select(arr);
		System.out.println(s.format(new Date()));
}

3,插入排序

从arr[1]到arr[n-1],依次向前找到自己的位置插入。 一个value来存需要插入的值,一个index来存前一个数的下标 所以依次向前判断,如果index处的值比value大,就把index处的值往后移,index-1继续向前,找到0时或index处的值比value小,就将value的值插入arr[index+1]

代码实现

public static void sort(int[] arr) {
		
		for(int i=1; i<arr.length;i++) {
			int value = arr[i]; //要插入的下标
			int index = i-1;//前面数的下标
			
			while(index >= 0 && arr[index] > value) {
				arr[index+1] = arr[index];
				index--;
			}
			
			arr[index+1] = value;
			
		}
	}

测试速度

80000个数据,大约需要1到2秒

                int[] arr = new int[80000];
		for(int i=0; i<80000; i++) {
			arr[i] = (int) (Math.random()*80000);
		}
		
		SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:dd:ss");
		System.out.println(s.format(new Date()));
		sort(arr);
		System.out.println(s.format(new Date()));