62,614
社区成员
发帖
与我相关
我的任务
分享
public static void select(int [] arr){
int length = arr.length;
for(int i = 0; i < length; i++){
/**
* 外层循环,认为未排序的部分的起始部分是下标从0开始。
* 排好的部分是下标是0之前的部分
*/
int index = i;
for(int j = i + 1; j < length; j++){
/**
* 内存循环,在未排的部分中找到最大的那个
* 把它的下标记在index变量中
*/
if(arr[index] > arr[j]){
index = j;
}
}
/**
* index中记录的是未排序的部分的最大数字的下标
* 如果index等于i,加个判断,减少交换次数
*/
if(index != i){
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
/**
* 外层循环执行i++之后,认为未排序的部分是下标从1开始
* 排好的部分是下标是1之前的部分
*/
}
/**
* 打印语句
*/
for(int k: arr){
System.out.println(k);
}
}
//选择排序
//原理:每次都找到当次最大的数,按大小顺序依次放入数组相应位置
//比如:第一次先找到最大的数并记下其位置,如果其不在数组第一位,
//则将其与第一位交换,使最大数置于第一位
//第二次再循环查找第二大的数并记下其位置,如果其不在数组第二位,
//则将其与第二位交换,使最大数置于第二位
//依次类推.........................................
//第i次再循环查找第i大的数并记下其位置,如果其不在数组第 i位,
//则将其与第 i位交换,使最大数置于第 i位
public class SelectSort {
public static void main(String[] args) {
int[] a = {25,15,42,16,12,36};
int max = 0;
int tmp = 0;
for(int i=0;i<a.length;i++){
max = i;//
/**查找第 i大的数,直到记下第 i大数的位置***/
for(int j=i+1;j<a.length;j++){
if(a[max]<a[j])
max = j;//记下较大数位置,再次比较,直到最大
}
/***如果第 i大数的位置不在 i,则交换****/
if(i!=max){
tmp = a[i];
a[i] = a[max];
a[max] = tmp;
}
}
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
}
}