• 排序算法之简单选择排序


    概念

    通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换

    Java代码实现

    	public static void select(Integer[] array) {
    		int min;
    		for (int i = 0; i < (array.length-1); i++) {
    			min = i;
    			for (int j = i+1; j < array.length; j++) {
    				if (array[min] > array[j]) min = j;
    			} // end for compare length-i+1 elements
    			// find the smallest element and swap with ith element
    			if (i != min) Helper.swap(array, i, min);
    		} // end for loop length-1 times
    	}
    

     每一次比较并不替换,只是记录下较小值的位置,知道内循环完成,找到最小值,再替换

    时间复杂度分析

    最好情况,初始已为有序序列,需比较n(n-1)/2次,移动0次,时间复杂度为O(n2)

    最差情况,初始为倒序序列,需比较n(n-1)/2次,移动n-1次,时间复杂度为O(n2)

    最好情况和最坏情况的时间复杂度相同,主要是比较次数相同,应该可以用一个标记来优化。

    同冒泡排序算法比较,由于移动次数较少,所以总体要略优于冒泡排序

    空间复杂度分析

    所需要的辅助空间为O(1)

  • 相关阅读:
    顺序的分数 Ordered Fractions
    容易的网络游戏
    Linux常用命令大全(share)
    Linux和UNIX监控
    Linux命令汇总
    优秀员工的10个修养
    ibatis使用--SqlMapClient对象
    一个男人关心的东西 决定了他的层次
    Linux下vi命令大全
    Linux中图形界面和文本模式相互切换
  • 原文地址:https://www.cnblogs.com/scarlettxu/p/3488307.html
Copyright © 2020-2023  润新知