ustbfym 2019-11-09
import java.util.ArrayList; import java.util.Random; /* *返回一个数组,下标0是该元素的下标,下标1是该元素的值 */ public class minNumber { //每次返回接受数组中最小的数字,以数组的形式返回,0是最小数,1是它的下标 public static ArrayList<Integer> findMinNumber(ArrayList<Integer> list){ ArrayList<Integer> min_number=new ArrayList<Integer>(); min_number.add(list.get(0)); min_number.add(0); for(int i=1;i<list.size();i++){ if(list.get(i)<min_number.get(0)){ min_number.add(0,list.get(i)); min_number.add(1,i); } } return min_number; } public static void main(String[] args){ //第一个是等待排序的列表,第二个相当于第一个的拷贝,第三个就是整理好的数组 ArrayList<Integer> list=new ArrayList<Integer>(10); ArrayList<Integer> pre_sort=new ArrayList<Integer>(10); ArrayList<Integer> after_sort=new ArrayList<Integer>(10); //装载数组对象,生成随机加入数组 //因为之后每次会删掉list的元素,所以每次给pre_sort也保存一下 for(int i=0;i<10;i++){ Random random=new Random(); int number=random.nextInt(100); list.add(i,number); pre_sort.add(i,number); } //每次找出原数组最小的元素加入新数组 for(int j=0;j<pre_sort.size();j++){ //min数组用来保存每次找出的最小数和它的下标, int[] min=new int[]{minNumber.findMinNumber(list).get(0),minNumber.findMinNumber(list).get(1)}; after_sort.add(min[0]); if(list.size()>=1){ list.remove(min[1]); } } System.out.println("排序前:"); //打印pre_sort数组的元素 for(int i=0;i<=pre_sort.size()-1;i++){ System.out.print(pre_sort.get(i)+" "); } System.out.println(); System.out.println("排序后:"); //打印after_sort数组的元素 for(int i=0;i<=pre_sort.size()-1;i++){ System.out.print(after_sort.get(i)+" "); } } }
要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。