排序的方法很多,即使是一个思想,也有不同的优化方案。
整理了一下简单选择排序。
选择排序
选择排序是一种灵巧的算法,容易理解和实现,但是速度不是很快。
思路
我有一个乱序的数组,我想将它从小到大排列---我们都知道数组是有序排列在一整块空间里的,有序排列就意味着,数组下标为i,就是第i小的。(数组的第一个元素下标是0,那么由小到大有序排列后,数组名[0]就是整个数组最小的,数组名[1]就是第二小的......数组名[length-1]就是最大的)
在数组list中有n个数据,第一次,我们在list[0]--list[length-1]中寻找最小值,将最小值赋值给list[0]
第二次,我们在list[1]--list[length-1]中寻找最小值,将此中最小值赋值给list[1]
第三次,我们在list[2]--list[length-1]中寻找最小值,将此中最小值赋值给list[2]
第四次,我们在list[3]--list[length-1]中寻找最小值,将此中最小值赋值给list[3]
直到所有数据排完。
代码
package SelectSort;
public class Selectsort {
public static void main(String[] args) {
//定义数组list
int[] list={9,8,5,12,7,4,3,90,1,0};
//得到排序后新数组
list=SeSort(list);
//依此输出(由小到大)
for(int i=0;i<list.length;++i){
System.out.println(list[i]);
}
}
//排序方法
public static int[] SeSort( int[] list){
for(int i=0;i<list.length;++i){
int min=i;//找出最小元素下标
for(int j=i;j<list.length;++j){
if(list[j]<list[min]){
min=j;
}
}
//将找到的第i小的值,和原数组该位置的值交换
int temp=list[min];
list[min]=list[i];
list[i]=temp;
}
return list;
}
}
分步骤实现;
package SelectSort;
public class Selectsort {
public static void main(String[] args) {
int[] list={9,8,5,12,7,4,3,90,1,0};
list=SeSort(list);
for(int i=0;i<list.length;++i){
System.out.println(list[i]);
}
}
public static int[] SeSort( int[] list){
for(int i=0;i<list.length;++i){
int t=findmin(list,i);
int temp=list[i];
list[i]=list[t];
list[t]=temp;
}
return list;
}
public static int findmin(int[] list2, int i) {
int min=i;
for(int j=i;j<list2.length;++j){
if(list2[j]<list2[min]){
min=j;
}
}
//System.out.println(min);
return min;
}
}