常见的排序算法:
选择排序(SelectionSort):
从头开始遍历,每次都取剩余元素的最小值与当前下标i的值进行交换,每完成一次循环将固定一个元素的位置(第n次循环将确定第n小的数据的位置)
将数组分为两部分array[0…i-1]和array[i…n-1],每次循环后的array[0…i-1]都是排好序的
表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,
数据规模越小越好。唯一的好处可能就是不占用额外的内存空间
public class SelectionSort {
public static void main(String[] args) {
int[] array = {10,9,8,7,6,5,4,3,2,1};
System.out.println("排序前:");
System.out.println(Arrays.toString(array));
array = selectiontSort(array);
System.out.println("\n排序后:");
System.out.println(Arrays.toString(array));
}
public static int[] selectiontSort(int[] array){
int count = 0;
for (int i=0;i<array.length-1;i++){
//假设当前元素为剩余元素中的最小值,取该元素的下标
int min = i;
//j=i+1;比i小的元素都已经排好序了(从小到大)
for (int j=i+1;j<array.length;j++){
count++;//统计循环次数
//如果遇到比当前元素小的,那么去其下标替换当前元素下标,保证min中存储的一直是当前最小元素的下标
if(array[min]>array[j]){
min = j;
}
}
//找到本次循环的最小值下标后,将最小值与当前元素i交换值,每完成一次循环将固定一个元素的位置(当前最小值)
int temp = array[i];
array[i] = array[min];
array[min] = temp;
}
System.out.println("\n本次排序循环了"+count+"次");
return array;
}
}![在这里插入图片描述](https://img-blog.csdnimg.cn/2019082914405271.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxOTM5MDIw,size_16,color_FFFFFF,t_70)