选择排序和插入排序

/*有两种简单排序算法分别是插入排序和选择排序,两个都是数据量小时效率高。
实际中插入排序一般快于选择排序,由于更少的比较和在有差不多有序的集合表现更好的性能。
但是选择排序用到更少的写操作,所以当写操作是一个限制因素时它被使用到*/
算法:将数组分为两部分,一部分是已经排好顺序的,另一部分是未排序的。每次找数组后半部分中最小的一个元素排到前面的序列。

//选择排序 Best:n^2 Average:n^2 Worst:n^2 Memory:1 Stable:No

void SelectionSort(int* pDataArray, int iDataNum)
{
    for (int i = 0; i < iDataNum - 1; i++)    //从第一个位置开始
    {
        int index = i;
        for (int j = i + 1; j < iDataNum; j++)    //寻找最小的数据索引 
            if (pDataArray[j] < pDataArray[index])
                index = j;

        if (index != i)    //如果最小数位置变化则交换
            DataSwap(&pDataArray[index], &pDataArray[i]);
    }
}

插入排序 Best:n Average:n^2 Worst:n^2 Memory:1 Stable:Yes

void insertSort(int *array, int len)  
{  
    int i, j, temp;  

    for(i = 1; i < len; i ++)  
    {  
        temp = array[i];  
        for(j = i - 1; j >= 0; j --)  
        {  
            if(array[j] > temp) //找到合适位置插入 
            {  
                array[j + 1] = array[j]; //大于部分往后移动     
            }else  
            {  
                break;  
            }  
        }  
        array[j + 1] = temp;//插入新值temp,即array[i]  
    }  
}  

/*
1.3 插入排序与选择排序的区别
插入排序类似于选择排序,不同之处是插入排序是一个元素一个元素地往有序序列中插入,而选择排序则是在无序序列中选择最大(最小)
元素放入有序队列末尾。一个主要操作有序队列,一个则是无序队列。这样就导致选择排序每次都要遍历一次无序队列,而插入排序则不
需要遍历整个有序队列,只需要遍历到该元素应有的位置即可,这样就使得基本有序的队列的复杂度为O(n).
但同时这会导致插入排序用到更多的写操作,因为内部循环时他对数组进行大量的移位操作,大家知道移位操作对于数组是非常低效率的。
而选择排序因为每次添加元素都是添加在末尾,所以不需要移位操作。
*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值