选择排序
是八大排序算法中最简单的排序算法。思路如下:
首先找到数组中最小的元素,其次,将他与数组的第一个元素交换位置(如果第一个元素就是最小元素,就自己和自己交换)。再次,就在剩下的元素中找到最小的元素,将其与第二个元素进行交换位置。如从反复,直至整个数组排序
public class sort{
public static void main(String[] args) {
int[] a={3,5,1,2,6,7,0,9,4};
System.out.println("排序前的数组a:");
System.out.println(Arrays.toString(a));
sort(a);
System.out.println("排序后的数组a:");
System.out.println(Arrays.toString(a));
}
private static void sort(int[] a) {
int length=a.length;
//升序排列
for (int i=0;i<length;i++){
int min=i;
//找到每一趟的最小元素的索引位置
for (int j=i+1;j<length;j++){
if (a[j]<a[min]){
min=j;
}
}
//交换元素
exchange(a,i,min);
}
}
private static void exchange(int[] a, int i, int j) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
选择排序的内循环只是在比较当前的元素与目前已知最小的元素,每次交换都能排定一个元素,因此交换次数总次数为N。所以算法的时间效率取决于比较的次数。
对于长度为N的数组,选择排序大约需要N^2/2次比较和N次交换
有两个鲜明的特点。
1、运行时间和输入无关。
2、数据移动是最少的。每次交换都会改变两个数组元素的值,因此选择排序用了N次交换——交换次数和数组大小是线性关系。