选择排序

来源:互联网 发布:海德格尔萨特知乎 编辑:程序博客网 时间:2024/06/05 14:22

简单选择排序:

就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。简单选择排序复杂度分析:它的比较次数一定:n(n-1)/2。也因此无论在序列何种情况下,它都不会有优秀的表现,可见对数据的有序性不敏感。它虽然比较次数多,而对于交换次数而言,当最好的时候,交换为0次,最坏的时候交换次数为n-1次,所以数据交换量却很少,基于时间复杂度是比较与交换次数的总和,因此总的时间复杂度依然为O(n^2)。尽管与冒泡排序算法的时间复杂度相同,但是简单选择排序的性能上还是略优于冒泡排序。

复杂度:

平均情况:O(n*n)最好情况:O(n*n)最坏情况:O(n*n)空间复杂度:O(1)

稳定性:

举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
#include<stdio.h>void printArray(int a[], int size)   //打印数组元素{    int i;     for(i = 0; i < size; i++)        printf("%d ",a[i]);    printf("\n");}void Select_Sort(int a[],int len)   {          int i,j,index,temp;          for (i = 0;i < len-1;i++)              {                index = i;              for (j = i+1;j < len;j++)              {                  if (a[index] > a[j])                      index = j;              }              if (i != index)                 temp = a[i];               a[i] = a[index];               a[index] = temp;               printArray(a,10);                                      }  }   int main(){    int count=10,a[10]={3,0,1,8,7,2,5,4,9,6};    printArray(a,count);    Select_Sort(a,count);}

结果

0 0