进行第一次选择排序,把数组中最小的数与数组下标为0的数字进行替换进行第二次选择排序,就把数组中第二小的数字与数组下标为1的数字进行替换进行第三次选择排序,就把数组中第三小的数字与数组下标为2的数字进行替换进行第n次选择排序,就把数组中第n小的数字与数组下标为n-1的数字进行替换一个大小为n的数组,选择排序的次数为n-1次这里经过我们的测试,选择排序和冒泡排序虽然时间复杂度都是n^2 ,但是实际情况下选择排序是优于冒泡排序的
package com
.qin
.sort
;
import java
.text
.SimpleDateFormat
;
import java
.util
.Arrays
;
import java
.util
.Date
;
public class SelectSort {
public static void main(String
[] args
) {
int [] arr
= {101,34,119,1};
int [] arr2
= {101,34,119,1};
System
.out
.println("排序前");
System
.out
.println(Arrays
.toString(arr
));
selectSort(arr
);
System
.out
.println("=============");
System
.out
.println("一次解决");
selectSort2(arr2
);
int [] arr3
= new int[80000];
for (int i
= 0; i
< 80000; i
++) {
arr3
[i
] = (int)(Math
.random()*80000000);
}
Date date1
= new Date();
SimpleDateFormat simpleDateFormat
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date1Str
= simpleDateFormat
.format(date1
);
selectSort2(arr3
);
Date date2
= new Date();
String date2Str
= simpleDateFormat
.format(date2
);
System
.out
.println("执行前的时间是"+date1Str
);
System
.out
.println("执行后的时间是"+date2Str
);
}
public static void selectSort(int [] arr
){
int minIndex
= 0;
int min
= arr
[0];
for (int i
= 0 + 1; i
< arr
.length
; i
++) {
if (min
>arr
[i
]){
min
= arr
[i
];
minIndex
= i
;
}
}
arr
[minIndex
] = arr
[0];
arr
[0] = min
;
System
.out
.println("第1轮后");
System
.out
.println(Arrays
.toString(arr
));
minIndex
= 1;
min
= arr
[1];
for (int i
= 0 + 2; i
< arr
.length
; i
++) {
if (min
>arr
[i
]){
min
= arr
[i
];
minIndex
= i
;
}
}
if (minIndex
!=1){
arr
[minIndex
] = arr
[1];
arr
[1] = min
;
}
System
.out
.println("第2轮后");
System
.out
.println(Arrays
.toString(arr
));
minIndex
= 2;
min
= arr
[2];
for (int i
= 0 + 3; i
< arr
.length
; i
++) {
if (min
>arr
[i
]){
min
= arr
[i
];
minIndex
= i
;
}
}
if (minIndex
!=2){
arr
[minIndex
] = arr
[2];
arr
[2] = min
;
}
System
.out
.println("第3轮后");
System
.out
.println(Arrays
.toString(arr
));
}
public static void selectSort2(int [] arr
){
for (int i
= 0; i
< arr
.length
-1 ; i
++) {
int minIndex
= i
;
int min
=arr
[i
];
for (int j
= i
+ 1; j
< arr
.length
; j
++) {
if (min
>arr
[j
]){
min
= arr
[j
];
minIndex
= j
;
}
}
if (minIndex
!= i
){
arr
[minIndex
] =arr
[i
];
arr
[i
] = min
;
}
}
}
}
结果:
同样是对8w个数据进行有小到大的排序,冒泡排序需要十几秒,而选择排序只需要一到两秒,可以参考 https://blog.csdn.net/qq_46049600/article/details/108956296 冒泡排序的消耗时间