选择排序和插入排序

来源:互联网 发布:单片机模拟键盘输入 编辑:程序博客网 时间:2024/05/22 06:53

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

//选择排序 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).
但同时这会导致插入排序用到更多的写操作,因为内部循环时他对数组进行大量的移位操作,大家知道移位操作对于数组是非常低效率的。
而选择排序因为每次添加元素都是添加在末尾,所以不需要移位操作。
*/

原创粉丝点击