1.常见的选择排序
1 public class Case { 2 3 public static void main(String[] args) { 4 int a[]=new int[] {5,4,27,1,9,8,3,12,-9}; 5 //查询外部总循环次数 6 for (int i = 0; i < a.length - 1; i++) { 7 //假设第一个值为最小值索引 8 int min = i; 9 //如果min不为最小值,则遍历数组,将最小的值保存为min索引 10 for (int j = i + 1; j < a.length; j++) { 11 if (a[min] > a[j]) { 12 min = j; 13 } 14 } 15 //如果此时数组下标min不等于i,则交换啊[min]和a[i]的值; 16 if (min != i) { 17 int tmp = a[min]; 18 a[min] = a[i]; 19 a[i] = tmp; 20 } 21 } 22 for(int i=0;i<a.length;i++) { 23 System.out.println(a[i]); 24 } 25 26 }
2.“反向”的选择排序
常见的选择排序将最小值依次放在数列最左边,换种思路将最大值依次放在最右边;实际两种算法的空间复杂度并没有区别,不过可以更深的了解选择排序。
public class Demo { public static void main(String[] args) { int[] a = {-67 , -34 , -5 , 5 , 6 , 25 ,45}; // 查询总次数 for(int i = 0;i<a.length - 1 ;i++) { //保存最大元素的索引 int maxIndex = 0; // 假设数组的第一个位置为最大元素索引 for(int k = 1;k<a.length - i;k++) { if(a[k]>a[maxIndex]) { maxIndex = k; } } if(maxIndex!=a.length - i - 1) { int temp = a[maxIndex]; a[maxIndex] = a[a.length - i - 1]; a[a.length - i - 1] = temp; } } for (int i = 0; i < a.length; i++) { System.out.println(a[i]); }