选择排序—思路+代码

选择排序

选择排序:(一直选择“第一位置元素”,与后边的数进行比较.)

选择第一个数,第一个数成为最小元素之后,再选择第二个数,第二个数成为除第一个元素之外最小的数(即,新的第一位置元素)之后,再选择第三个数…

·

思想:

1)让数组中的第一个数,依次与它后面的那些数们进行比较,
1.1)如果第一个数小于等于后面的数,不交换,继续遍历;
1.2)如果第一个数大于后面的数,就进行位置的交换。交换之后,新的第一个数,继续和后面的数进行比较;
这样多轮内循环结束之后,数列中最小的数就在第一个位置了;
`
2)之后,外循环+1(即,重新设定"第一位置元素"),内循环再来多轮,数列中第二小的数就选出来了;
3)外循环再+1,内循环再来一遍,数列中第三小的数就选出来了;

选择排序的时间复杂度是:O(n²)。

·

代码:
package xuanzepaixu;

/**
* @author:张永辉;
* @date: 2020/3/16; 11:41
* todo: 选择排序:(选择第一位置元素)
*          1)选择第一位置元素,
*              和后边的数依次比较,
*                      大于后边的数,就进行交换;然后交换后仍是第一位置的数继续与后边的数进行比较;
*                      小于等于后边的数,则继续遍历后边的下一位数;
*       *
*          2)外循环控制第一位置元素—>arr[i],第一轮外循环之后,最小的数就站在了第一个位置;
*        *
*          3)第二轮外循环,第一轮选出的那个第一位置元素不再参与比较,重新设定第二个数为第一位置元素,和后边的数依次比较,...
*/
public class XuanZe2 {
   public static void main(String[] args) {
//        一,定义数组:
       int[] arr = {23,54,65,3,5,2,87,33,345,435,11,325,555,121,346,0,20,49,17};

//        二,定义一个临时变量,用来后边交换元素顺序,作中间值;
       int temp = 0;

//        三,开始排序:
//           1),常规操作,先定义一个外循环:(用来控制第一位置元素)
//              只有在多轮内循环之后,才选出第一个位置是最小的数,所以,"第一位置元素"不能随着内循环而变化,而是应该跟着外循环而变化,因为每一轮外循环过后,选出一个“第一位置元素”;所以"第一位置元素"应该是arr[i];
       for (int i = 0; i < arr.length; i++) {

//            2),内循环,让“第一位置元素”依次与后边的元素进行比较;
           for (int j = i+1; j < arr.length; j++) {

//                2.1)如果第一个数大于后边的数,则进行交换;交换之后,j++(继续往后遍历),此时、此后,仍然是第一个位置的数(arr[i])与后边的数进行比较;
               if (arr[i] > arr[j]) {
                   temp = arr[j];
                   arr[j] = arr[i];
                   arr[i] = temp;
               }

//                2.2)如果第一个数 不大于 后边的数,则继续遍历后边的下一个数;
               else{
                   continue;
               }

           }
       }


       //        四,打印结果:
       for (int i : arr) {
           System.out.print(i+"----");
       }


   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值