java排序算法之选择排序

原理:每一次遍历得到未排序数组中的最小的一个值,然后将这个值放置到已排好序数组部分的末尾处,直到全部数组元素排好序为止。假设有n个元素 ,当前前p个元素已经排好序,这时遍历 数组(n-p+1,n-1)之间的最小元素并将得到的结果放置到第p个位置。基于这种思想的排序算法有 简单选择排序,树形选择排序和堆排序。

思想:假如一个有n个元素的数组a={1,2,3,4,5...n},第一次从n个元素中选择出最小的元素与a[0]的位置上元素交换,第二次将第2小的元素与a[1]的位置上元素交换,第i次将第i小的元素与a[i-1]的位置上元素交换,只到遍历到最后一个元素,不用遍历,自然为最大值

举例:

数组 int[] arr={50,20,80,40,90,10};

第一趟排序: 原始数据:50,20,80,40,90,10

最小数据10,把10放在首位,也就是1050互换位置,

排序结果:10 20  80 40  90  50

第二趟排序:

10以外的数据{20  80  40  90 50}进行比较,2最小,

排序结果:10  20  80  40  90  50

第三趟排序:

1020以外的数据{80 40  90  50}进行比较,40最小,8040交换

排序结果:10  20  40  80  90  50

........

以此论推,5次即可比较完成

代码:

 public static void main(String args[])
    {
       int [] a={20,10,50,40,30,70,60,80,90,100};
        for(int i = 0; i < a.length - 1; i++) {// 做第i趟排序,一共需要拍n-1次
            int k = i;
            for(int j = k + 1; j < a.length; j++){
                if(a[j] < a[k]){
                    k = j; //找到最小值所在的位置
                }
            }
            //一轮循环结束,也就是找到本轮循环的最小的数以后,再进行交换
            if(i != k){  //交换a[i]和a[k]
                int temp = a[i];
                a[i] = a[k];
                a[k] = temp;
            }
        }
        System.out.println("交换后:");
        for(int item:a){
            System.out.print(item+" ");
        }
    }

截图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值