排序算法:选择排序算法思想与代码示例

选择排序算法也是比较简单的排序算法,选择排序算法在每一步中选取最小值来重新排列,从而达到排序的目的。

选择排序算法

通过选择和交换来实现排序,以从小到大排序为例,其排序流程如下:

(1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。

(2)接着从剩下的n - 1 个数据中选择次小的1个数据,将其和第2个位置的数据交换。

(3)然后不断重复上述过程,直到最后两个数据完成交换。

初始数据: 118  101  105  127  112

一次排序: 101  118  105  127  112

二次排序: 101  105  118  127  112

三次排序: 101  105  112  127  118

四次排序:  101  105  112  118  127

选择排序算法特点:在对n个数据进行排序时,无论原数据有无顺序,都需要进行 n - 1步的中间排序。思路简单直观,但是执行的步骤较多,效率不高。

选择排序算法的示例代码如下:

    void selectSort(int[] a){
        int index;
        int temp;
        for(int i = 0; i < a.length-1; i++) {
            index = i;
            for(int j = i + 1; j < a.length; j++) {
                if(a[j] < a[index]) {
                    index = j;
                }
            }
            if(index != i){
                temp = a[i];
                a[i] = a[index];
                a[index] = temp;
            }
            System.out.printf("第%d步排序结果为:",i+1);
            for(int k = 0; k < a.length; k++) {
                System.out.print(a[k] + "\t");
            }
            System.out.println();
        }
    }

选择排序算法实例

随机生成100~200之间的10个整数,将整数以1维数组的方式保存,用选择排序算法进行从小到大排序:

public class SelectSort {
    private static final int SIZE = 10;
    public static void selectSort(int[] a){
        int index;
        int temp;
        for(int i = 0; i < a.length-1; i++) {
            index = i;
            for(int j = i + 1; j < a.length; j++) {
                if(a[j] < a[index]) {
                    index = j;
                }
            }
            if(index != i){
                temp = a[i];
                a[i] = a[index];
                a[index] = temp;
            }
            System.out.printf("第%d步排序结果为:",i+1);
            for(int k = 0; k < a.length; k++) {
                System.out.print(a[k] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        int[] array = new int[SIZE];
        for(int i = 0; i < SIZE; i++) {
            array[i] = (int)(100 + Math.random()*100);
        }
        System.out.println("排序前的数组为:");
        for(int num:array){
            System.out.print(num + "\t");
        }
        System.out.println();

        selectSort(array);

        System.out.println("排序后的数组为:");
        for(int num:array){
            System.out.print(num + "\t");
        }
    }
}

运行结果如下:

排序前的数组为:
145	157	158	106	132	118	168	142	180	172	
第1步排序结果为:106 157 158 145 132 118 168 142 180 172 
第2步排序结果为:106 118 158 145 132 157 168 142 180 172 
第3步排序结果为:106 118 132 145 158 157 168 142 180 172 
第4步排序结果为:106 118 132 142 158 157 168 145 180 172 
第5步排序结果为:106 118 132 142 145 157 168 158 180 172 
第6步排序结果为:106 118 132 142 145 157 168 158 180 172 
第7步排序结果为:106 118 132 142 145 157 158 168 180 172 
第8步排序结果为:106 118 132 142 145 157 158 168 180 172 
第9步排序结果为:106 118 132 142 145 157 158 168 172 180 
排序后的数组为:
106	118	132	142	145	157	158	168	172	180

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值