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;
}