选择排序

简单选择排序:

就是通过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);
}

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值