赞
踩
常见排序列表:
package queue; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class Demo3 { public static void main(String[] args) { //-----------------------------------------------普通测试 // int[] num = {5,2,6,7,8,10}; // System.out.println("排序前"); // System.out.println(Arrays.toString(num)); // int[] array = bubbleSort(num); // System.out.println("排序后"); // System.out.println(Arrays.toString(array)); //-----------------------------------------------向数组中添加多个(80000)数据测试排序时间 int[] arr = new int[80000]; for(int i=0;i < 80000;i++) { arr[i] = (int)(Math.random()*80000); } Date time1 = new Date(); //时间格式化 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String timePre = sdf.format(time1); System.out.println("排序前的时间是:"+timePre); //调用排序算法 bubbleSort(arr); Date time2 = new Date(); String timeNex = sdf.format(time2); System.out.println("排序后的时间是:"+timeNex); /** * 由此测试可以看出,冒泡排序的时间复杂度比较高 * 排序前的时间是:2022-03-21 14:47:55 * 排序后的时间是:2022-03-21 14:48:27 * */ } public static int[] bubbleSort(int[] num) { boolean flag = true; int temp=0; for(int i=0;i < num.length-1;i++) { //或i = num.length-1;i>0;i-- for(int j=0;j < num.length-i-1;j++) { //或j=0;j<i;j++ if(num[j] > num[j+1]) { flag = false; temp = num[j]; num[j] = num[j+1]; num[j+1] = temp; } } // System.out.println("第"+(i+1)+"趟排序结果:"); // System.out.println(Arrays.toString(num)); /** * 这里的flag判断的作用是,优化时间复杂度 * 当传入一个只需要走两三步就可完成排序的数组时,如:[5,2,6,7,8,10] * 只需要循环一次就可以得到最终的结果 * */ if(flag) { break; }else { flag = true;//重置flag为true,如果执行到这里说明元素发生过交换。flag已经为false。 } } return num; } }
思路:每次从后面选择最小的放在当前区间的前面
第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换, 第二次从arr[1]~arr[n-1]中选取最小值,与arr[1]交换, 第三次从arr[2] arr[n-1]中选取最小值,与arr[2]交换, .,第i次从arr[i-1]' arr[n-1]中选取最小值,与arr[i-1]交换,..第n-1次从arr[n-2]^ arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。
代码演示:
package dataStructure; import java.text.SimpleDateFormat; //选择排序 import java.util.Arrays; import java.util.Date; public class SelectSorting { public static void main(String[] args) { //------------------------------------------------普通测试 // int[] arr = {5,8,3,9,10}; // selectSort(arr); // System.out.println("排序后:"+Arrays.toString(arr)); //------------------------------------------------测试多个数据的时间复杂度 int[] arr = new int[80000]; for(int i=0;i < 80000;i++) { arr[i] = (int)Math.random()*80000; } Date time1 = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//日期格式化 System.out.println("测试前时间:"+sdf.format(time1)); selectSort(arr); Date time2 = new Date(); System.out.println("测试后时间:"+sdf.format(time2)); /** * 测试前时间:2022-03-21 14:46:25 * 测试后时间:2022-03-21 14:46:26 * 同样测试80000个数据,选择排序的时间复杂度要低于冒泡排序 * */ } public static void selectSort(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。