简单选择排序,C语言实现

简单选择排序和堆排序   都是内部排序中的选择排序。

首先我们先介绍

选择排序法的基本思想:我们想象一个炒股票的人,他只会在时机非常明确到来的时候才出手,也就是当排序的时候,找到合适的关键字再交换,并且只移动一次。

简单选择排序的基本思想:每一趟都是在(n-i+1),(i=1,2,3...n-1)个记录中选取关键字最小的记录作为有序序列的第i个记录。

例如给出10个数字   9   1   3   2   5   4   8   6   7   0,要求按照从小到大排序

  (1)   :用一个变量i指向数组的第一个位置也就是9,此时将0赋给变量min。(注意,此时i是0,只是他指向了数组的第一个位置,但是a[i]=9)

  (2) :用一个变量j指向i后一个位置,也就是1(j同i一样,仅仅是指向数组的第二个位置,所以j得值为1,但是a[j]=1)

(3):然后1,与9比较,9大,所以把j的值(注意:j的值是数组的位置)赋给min,j++

(4):然后j++重复步骤3,直到最后可以得到min=9,所以交换i和j的值然后i++,接着循环:0132548679

(5);循环上述步骤,可以的到最后的结果0123456789

代码如下:



时间复杂度分析:

无论什么情况,比较的次数是一样的((n-1)+(n-2)+...+1)=n*(n-1)/2

交换的次数,最好的情况下是0次,最坏是n-1次

所以,总的时间复杂度依然为O(n^2)

虽然总的时间复杂度和冒泡排序一样,但是简单选择排序的性能还是要略好于冒泡排序

猜你喜欢

转载自blog.csdn.net/weixin_40100502/article/details/80555300
今日推荐