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;
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。