直接选择排序:每次都找到当次最大的数,按大小顺序依次放入数组相应位置,可以从小到大或者从大到小。
比如:第一次先假设最大值位置是第一位,遍历数组找到最大的数并记下其位置,如果其不是数组第一位,
则将其与第一位交换,使最大数置于第一位
第二次再循环查找第二大的数并记下其位置,如果其不在数组第二位,
则将其与第二位交换,使最大数置于第二位
依次类推.........................................
第i次再循环查找第i大的数并记下其位置,如果其不在数组第 i位,
则将其与第 i位交换,使最大数置于第 i位
public void sort(int[] array) {
for (int i = 0; i < array.length; i++) {
// suppose the index of max value is i
int max = i;
for (int j = i + 1; j < array.length; j++) {
//desc
// if (array[max] > array[j]){
// max = j;
// }
//asc
if(array[max] < array[j]){
max = j;
}
}
// 如果i 不等于 max,说明最大值不是i的位置的,则交换
if( i != max){
int temp = array[i];
array[i] = array[max];
array[max] = temp;
}
}
}
性能评价:比较次数--O(n*n),交换次数O(n)