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

    算法思想

    1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
    2. 然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。
    3. 依此进行,直到所有元素均排序完毕。

    动画演示:

    实现

    C++

    void selectSort(vector<int> &array)
    {
    	int len = array.size();
    	for (int i = 0; i < len - 1; i++)
    	{
    		int min = array[i];
    		int minPos = i;
    		for (int j = i + 1; j < len; j++)
    		{
    			if (array[j] < min)
    			{
    				min = array[j];
    				minPos = j;
    			}
    		}
    		if (minPos != i)
    			swap(array[i], array[minPos]);
    	}
    }
    

    python

    def selectionSort(alist):
        for i in range(len(alist)):
            min = alist[i]
            minPos = i
            for j in range(i,len(alist)):
                if alist[j] < min:
                    min = alist[j]
                    minPos = j
            if minPos != i:
                alist[minPos],alist[i] = alist[i],alist[minPos]
    

    总结

    稳定性:
    用数组实现的选择排序是不稳定的,用链表实现的选择排序是稳定的。
    不过,一般提到排序算法时,大家往往会默认是数组实现,所以选择排序是不稳定的。

    适用场景:
    选择排序实现也比较简单,并且由于在各种情况下复杂度波动小,因此一般是优于冒泡排序的,适用于简单数据排序。

    复杂度:
    (Oleft(n^{2} ight))

  • 相关阅读:
    第11组 Beta版本演示
    第11组 Beta冲刺(5/5)
    第11组 Beta冲刺(4/5)
    第11组 Beta冲刺(3/5)
    第11组 Beta冲刺(2/5)
    第11组 Beta冲刺(1/5)
    第11组 Alpha冲刺(2/6)
    第11组 Alpha冲刺(1/6)
    第11组 团队Git现场编程实战
    团队项目-需求分析报告
  • 原文地址:https://www.cnblogs.com/chay/p/10673108.html
Copyright © 2011-2022 走看看