关于选择排序的两种实现方法
程序员文章站
2022-03-24 13:45:29
...
方法一:
最外层的i代表排序后第i+1小的数(array[0]代表第1小,array[1]代表第2小…以此类推)
内层的j用来筛选未参与排列的数组区,一旦发现有比array[i]还小的数,就与其交换
public static void selectSort1(int[] array){
for(int i = 0 ; i<array.length-1 ; ++i){
for(int j = i+1 ; j<array.length ;j++){
if(array[i] > array[j]){
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
}
========================================================
方法二:
public static void selectSort2(int[] array){
for(int i = 0 ; i<array.length-1;++i){
findMin(array,i);
}
}
//在数组下标区间[start,array.length)中找出最小值,并置换到start处
public static void findMin(int[] array,int start){
//如果start非法
if(start<0||start>=array.length-1)return;
//开始
int min = array[start]; //初始化最小值
int minIndex = start; //初始化最小值下标位置
for(int i = start+1;i<array.length;++i){
if(array[i]<min){//如果发现了更小的数
//修改最小值及其下标位置
min = array[i];
minIndex = i;
}
}
//循环完毕后就可以得到最小数据的下标minIndex
//交换start处与最小minIndex处的数据
if(minIndex!=start){
array[minIndex] = array[start];
array[start] = min;
}
}