- /*
- * 选择排序:
- * 算法思想:
- * 从第一位开始比较,找到最小的然后从角标为1的元素往后开始比较找到第二小
- * 示例:索引 0 1 2 3 4
- * i 1 6 3 9 2
- *
- * 1 6 3 9 2 1<6 不动
- * 1 6 3 9 2 1<3 不动
- * 第0趟 1 6 3 9 2 1<9 不动
- * 1 6 3 9 2 1<2 不动 得到1为最小值 arr[0] = 1
- * 共比较4次
- *
- * 第1趟 1 3 6 9 2 6>3 交换
- * 1 3 6 9 2 3<9 不动
- * 1 2 6 9 3 3<2 交换 得到2为第二小 arr[1] = 2
- * 共比较3次
- * 第2趟 1 2 6 9 3 6<9 不动
- * 1 2 3 9 6 6>3 交换 得到3位第三小 arr[2] = 3
- * 共比较2次
- *
- * 第3趟 1 2 3 6 9 9>6 交换 的到6为第四小 arr[3] = 6
- * 共比较1次 那么9就是最大的 arr[4] = 9
- *
- * 外圈循环4次 int.length() = 5 ; x
- * 定义外圈变量 x = 0 ,那么内圈 y 从1-5 大于1 0 + 1 = 1
- * 定义外圈变量 x = 1 ,那么内圈 y 从2-5 大于2 1 + 1 = 2
- * 定义外圈变量 x = 2 ,那么内圈 y 从3-5 大于3 2 + 1 = 3
- * 定义外圈变量 x = 3 ,那么内圈 y 从4-5 大于4 3 + 1 = 4
- * 从arr[x]和arr[x+1]做对比 为了防止角标越界 外圈循环要少一次
- *
- */
- public class SelectSort {
- /**
- * @param args
- */
- static int[] arr = {1,6,3,9,2};
- public static void main(String[] args) {
-
- sortArr1();
- printArr();
- }
- public static void sortArr1() {
- for (int i = 0; i < arr.length-1; i++) {
- for (int j = i+1; j < arr.length; j++) {
-
- if(arr[i]>arr[j]){
- swap(arr,i,j);
- }
- }
- }
- }
- private static void swap(int[] arr, int i, int j) {
- int temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
- public static void printArr(){
- System.out.print("[");
- for (int i = 0; i < arr.length; i++) {
-
- if(i!=arr.length-1){
- System.out.print(arr[i]+" ,");
- }else{
- System.out.print(arr[i]+"]");
- }
- }
- }
- }
复制代码 |
|