ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java选择排序

2021-12-15 19:31:17  阅读:167  来源: 互联网

标签:Java 队员 nElems 选择 int 排序 public out


选择排序改进了冒泡排序,所改进的是排序时交换的次数,并没有改进比较的次数。在大批量数据排序的时候,选择排序中对于交换数据的时间和比较的时间来说,很显然,数据交换和移动的时间更为重要(一般来说,Java中不是这种情况,Java中只是改变了引用的位置,而实际对象的位置并未发生改变)

    用选择排序对篮球队员进行排序:

进行选择排序就是把所有的队员扫描一遍,找到其中最低的队员,让他与最左边的队员(0号位置)进行交换(如果最左边的队员就是最低的,那么不进行交换)。这样最左边的队员就是有序的状态,不需要再次交换位置了。注意,这个算法中呢,有序的都排列在队伍的最左边,与冒泡排序相反(冒泡排序是从最右边)。再次扫描队列时,就是从1号位置开始,也是找到最矮的,与队列的1号位置进行交换,那么依次下去,一直持续到整个顺序排列完成。

第一次

第二次

 

第三次

 

依次如图所示。

接下来上代码:

public class selectSort {
    private long[] a;
    private int nElems ;
    public selectSort(int max) {
        a = new long[max];
        nElems = 0;
    }
    public void insert(long value) {
        a[nElems] = value;
        nElems++;
    }
    
    public void display() {
        for (int i = 0; i < nElems-1; i++) {
            System.out.println(a[i]+"");
        }
        System.out.println("");
    }
    
    public void swap(int one , int two) {
        long temp = a[one];
        a[one] = a[two];
        a[two] = temp;
    }
    
    public void selectSortApp() {
        int min ,in ,out ;
        for ( out = 0; out < nElems-1; out++) {
            min = out ;
            for ( in = out+1; in < nElems; in++) {
                if(a[in]<a[min]){
                    min = in;
                }
            }
            swap(out, min);
        }
    }
}

out:用来记录外层循环,从数组开头0开始,依次增长。

in:用来记录内层循环,找到每一轮的最矮队员,并将他与这一轮起始的队员进行交换。

min:用来记录当前最矮的队员。

选择排序的效率:选择排序与冒泡排序进行了同样次数的比较,N*(N-1)/2,但是一列数组如果有10个数据项,只需要少于10次的比较就可以了。如果数据量N约大,那么选择排序就会比冒泡排序节省很多时间(在数据交换位置上节省),数据量很小的情况下,两者相当。

 

标签:Java,队员,nElems,选择,int,排序,public,out
来源: https://blog.csdn.net/Nooneandyoui/article/details/121959500

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有