zoukankan      html  css  js  c++  java
  • 直接选择排序

    首先找到数组中最小的元素,将其与第一个元素交换。随后在剩下的元素中找到最小的元素,与第二个元素交换。依次类推..

    选择排序的内循环只是比较当前元素与目前已知的最小元素,交换元素的动作写在内循环外,每次交换都能确定一个元素的最终位置。

    因此,交换的总次数为N,算法的时间效率取决于比较的次数。它有两个很鲜明的特点

    1,运行时间和输入无关

    为了找出最小的元素而扫描一遍数组并不能为下一遍扫描提供什么信息,使用选择排序的人可能会惊讶的发现一个已经有序的数组和一个随机排列的数组所用的排序时间竟然一样。

    2,数据移动是最少的

    每次交换都会改变两个数组元素的值,因此选择排序只用了N次交换。即交换次数和数组的大小是线性关系。其它算法则多是线性对数或平方关系。

    JavaScript

    function selectSort(ary) {
        var i, j, k, temp;
        var len = ary.length;
        
        for(i=0; i<len; i++) {
            k = i;
            // 找出最小的元素索引
            for(j=i+1; j<len; j++) {
                if(ary[k] > ary[j]) {
                    k = j;
                }
            }
            temp = ary[i];
            ary[i] = ary[k];
            ary[k] = temp;
        }
        
        return ary;
    }
    // var ary = [5,4,3,2,1];
    // console.log(selectSort(ary));
    

      

    Java

    public class Test {
    	
    	public static void selectSort(int[] ary) {
    		int i, j, k, temp;
    		int len = ary.length;
    		
    		for(i=0; i<len; i++) {
    			k = i;
    			for(j=i+1; j<len; j++) {
    				if(ary[k] > ary[j]) {
    					k = j;
    				}
    			}
    			temp = ary[i];
    			ary[i] = ary[k];
    			ary[k] = temp;
    		}
    		
    	}
    	
    	public static void main(String[] args) {
    		int[] ary = {5,4,3,2,1};
    		Test.selectSort(ary);
    		for(int it : ary) {
    			System.out.println(it);
    		}
    
    	}	
    }
    

      

    C

    void selectSort(int ary[], int len) {
    	int i, j, k, temp;
    	for(i=0; i<len; i++) {
    		k = i;
    		// 找出最小的元素索引 
    		for(j=i+1; j<len; j++) {
    			if(ary[k] > ary[j]) {
    				k = j;	
    			}
    		}
    		temp = ary[i];
    		ary[i] = ary[k];
    		ary[k] = temp;
    	}
    
    }
    
    main() {
    	int i;
    	int ary[]  = {5,4,3,2,1};
    	selectSort(ary, 5);
    	for(i=0; i<5; i++) {
    		printf("%d", ary[i]);
    	}
    	
    }
    

      

  • 相关阅读:
    mybatis中使用in查询时的注意事项
    单利模式
    jquery编写插件的方法
    python使用sendmail在linux下发送邮件
    python获取命令行输入参数列表
    互联网的实名与匿名
    Python切分字符串
    2017年3月15日留言 ——关于Java卡Applet系列csdn博文
    linux设置定时任务
    经典面试题:用户反映你开发的网站访问很慢可能会是什么原因
  • 原文地址:https://www.cnblogs.com/snandy/p/2207510.html
Copyright © 2011-2022 走看看