标签:一个 select swa 最小 时间复杂度 下标 结束 空间 实现
public void selectSort(int[] array) {
for(int i = 0; i < array.length - 1; i++) {
//无序区间是[0, array.length - i)
//有序区间是[array.length - i, array.length)
int max = 0;
for(int j = 0; j < array.length - i; j++) {
if(array[j] > array[max]) {
max = j;
}
}
int tmp = array[max];
array[max] = array[array.length - 1 - i];
array[array.length - 1 - i] = tmp;
}
}
双向选择排序
代码:
public void selectSortOP(int[] array) {
int left = 0;
int right = array.length - 1;
while(left <= right) {
int min = left;
int max = left;
//遍历无序区间,找到最大值和最小值的下标
for(int i = left + 1; i <= right; i++) {
if(array[i] > array[max]) {
max = i;
}
if(array[i] < array[min]) {
min = i;
}
}
swap(array, min, left);
//判断最大的值是否在最左侧,如果是在最左侧的话由于最小的元素已经和他进行了交换,此时最大值的下标就
//不再是left,而是交换后的min
if (max == left) {
max = min;
}
swap(array, max, right);
left++;
right--;
}
}
private void swap(int[] array, int i, int j) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
标签:一个 select swa 最小 时间复杂度 下标 结束 空间 实现
原文地址:https://blog.51cto.com/14233687/2471986