简单排序——冒泡,选择,插入

冒泡排序
     最笨的排序方法 O(n2)    比较n(n-1)/2,移动次数超级多 最坏3(n2)/2
类似于水的冒泡,不断变换位置将需要的依次冒上来


//升序排列
void maopao()
{
    int t;
    for(int i=0;i<n;i++)
        for(int j=0;j<n-i-1;i++)
    {
        if(a[j]>a[j+1])
        {
            t=a[j+1];
            a[j+1]=a[j];
            a[j]=t;
        }
    }
}

选择排序
     升序:依次选择最大的与最后一个位置互换 O(n2)  比较n(n-1)/2  移动3(n-1)

//升序排列
void xuanze()
{
    int t;//记录位置
    int k;
    for(int i=n-1;i>0;i--)
     {
         t=0;
        for(int j=1;j<i+1;i++)
        {
            if(a[t]<a[j])
                t=j;
        }
        k=a[i];
        a[i]=a[t];
        a[t]=k;
     }
}

插入排序
O(n2)     最坏比较n(n-1)/2  最好比较 n-1   故(n2)/4    在排序个数较小的时候(一般小于16)优于O(nlogn)复杂度算法
相比选择排序的优点在于利用了排好的有序队列

//升序排列
void insertion_sort(int array[],int first,int last)
{
int i,j;
int temp;
for(i=first+1;i<=last;i++)
{
temp=array[i];
j=i-1;
//与已排序的数逐一比较,大于temp时,该数移后
while((j>=0)&&(array[j]>temp))
{
array[j+1]=array[j];
j--;
}
//存在大于temp的数
if(j!=i-1)
{array[j+1]=temp;}
}
}

后记:还存在一种对插入排序的改写,希尔排序,但在小时没有改善,大时就不用O(n2)复杂度的方法了,所以没啥用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值