美文网首页
冒泡排序以及选择排序

冒泡排序以及选择排序

作者: 隔墙老张 | 来源:发表于2016-10-02 19:51 被阅读0次

在下偶尔心血来潮,去写了最基本的排序算法,发现居然写不出来,因此深受打击,特写此文章给那些和在下一样的刚入门的小白们!废话不多说直接贴代码!

//冒泡排序
void bubblingSort(){
    int[] arr={5,9,0,1,4};
    System.out.println("排序之前");
    for(int n:arr){
        System.out.print(n);
    }
    System.out.println();

    for(int i=0;i<arr.length-1;i++){    //外循环控制比较的轮数
        for(int j=0;j<arr.length-i-1;j++){
            if(arr[j]<arr[j+1]){
                int max=arr[j+1];
                arr[j+1]=arr[j];
                arr[j]=max;
            }
        }
    }
    
    System.out.println("排序之后");
    for(int n:arr){
        System.out.print(n);
    }
}

上面的代码是排序中最简单的冒泡排序,它的原理是在每轮的比较中比较两个相近的值,然后互换,这样的理解起来虽然容易,但是效率并不高,下面是另一种排序方式,叫做选择排序,代码如下:

//选择排序
void choseSort(){
    int[] arr={5,9,0,1,4};
    System.out.println("排序之前");
    for(int n:arr){
        System.out.print(n);
    }
    System.out.println();
    
    for(int i=0;i<arr.length-1;i++){//控制轮数
        int max=i;//每次将第一个下标先赋值给max
        for(int j=i+1;j<arr.length;j++){
            if(arr[j]>arr[max]){
                max=j;
            }
        }
        if(max!=i){//如果最大值不是刚开始的i
            int temp=arr[max];
            arr[max]=arr[i];
            arr[i]=temp;
        }
    }
    
    System.out.println("排序之后");
    for(int n:arr){
        System.out.print(n);
    }
}

选择排序的原理在下看来其实更为合理,每一轮将第(i)个值设为最大的值的下标,然后与后面的值进行比较,如果后面的值大于max,那么就将它的下标赋值给max,这样一次外循环就得出了最大值的下标max,然后进行比较是不是原来设置的i,如果不是的话进行交换;显然这样的执行效率更高!

这就是在下会的两种排序方式,希望对刚入门的战友有一些用!

相关文章

网友评论

      本文标题:冒泡排序以及选择排序

      本文链接:https://www.haomeiwen.com/subject/clmdyttx.html