c语言中冒泡排序插入排序选择排序算法比较

Posted 程梦启航

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中冒泡排序插入排序选择排序算法比较相关的知识,希望对你有一定的参考价值。

来自:http://blog.chinaunix.net/

链接:http://blog.chinaunix.net/uid-26758209-id-3139356.html

掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间。每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中就显得尤其的重要,比如嵌入式系统。下面简要介绍三种常用的排序算法以及他们的执行效率的比较。

      

冒泡排序

       思路:将相邻的两个数比较,将较小的数调到前头;有n个数就要进行n-1趟比较,第一次比较中要进行n-1次两两比较,在第j趟比较中,要进行n-j次两两比较。

       实现代码:

  1. void BublleSort (int arr [], int count)

  2.     {

  3.         int i, j, temp;

  4.         for(j=0; j<count-1; j ) /* 冒泡法要排序n-1次*/

  5.             for(i=0; i<count-j-1; i )/* 值比较大的元素沉下去后,只把剩下的元素中的最大值再沉下去就可以啦 */

  6.             {

  7.                 if(arr[i]>arr[i 1])/* 把值比较大的元素沉到底 */

  8.                 {

  9.                     temp=arr[i 1];

  10.                     arr[i 1]=arr[i];

  11.                     arr[i]=temp;

  12.                 }

  13.             }

  14.     }


插入排序

思路:在得到要排序的数组以后,讲数组分为两个部分,数组的第一个元素为一个部分,剩下的元素为一部分,然后从数组的第二个元素开始,和该元素以前的所有元素比较,如果之前的元素没有比该元素大的,那么该元素的位置不变,如果有元素的值比该元素大,那么记录相爱他所在的位置;例如I,该元素的位置为k,则将从ik位置上的所有元素往后移动一位,然后将k位置上的值移动到i位置上。这样就找到了K所在的位置。每一个元素都这样进行,最终就会得到排好顺序的数组。

       实现代码:

  1. void InsertSort ( int arr[],int count)

  2.     {

  3.             int i,j,temp;

  4.         for(i=1; i<count; i )//数组分两个部分,从第二个数组元素开始

  5.         {

  6.             temp = arr[i];//操作当前元素,先保存在其它变量中

  7.             for(j=i-1; j>-1&&arr[j]>temp;j--)//从当前元素的上一个元素开始查找合适的位置,一直查找到首元素

  8.             {

  9.                 arr[i] = arr[j];

  10.                 arr[j] = temp;

  11.             }

  12.     }

  13. }



选择排序

思路:首先以一个元素为基准,从一个方向开始扫描,比如从左到右扫描,以A[0]为基准,接下来从A[0]….A[9]中找出最小的元素,将其与A[0]交换。然后将其基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。一直进行到将基准位置移到数组最后一个元素时排序结束。

       实现代码

  1. void SelectSort(int arr[], int count)

  2.     {

  3.         int i,j,min,temp;

  4.         for(i=0; i<count; i )

  5.             {

  6.             min = arr[i];//以此元素为基准

  7.             for(j=i 1; j<count; j )//从j往前的数据都是排好的,所以从j开始往下找剩下的元素中最小的

  8.             {

  9.                 if(min>arr[j])//把剩下元素中最小的那个放到arr[j]中 

  10.                 {

  11.                     temp = arr[j];

  12.                     arr[j] = min;

  13.                     min = temp;

  14.                 }

  15.             }

  16.         }

  17.     }


以上是关于c语言中冒泡排序插入排序选择排序算法比较的主要内容,如果未能解决你的问题,请参考以下文章

数据结构c语言版八大算法(上)图文详解带你快速掌握——希尔排序,堆排序,插入排序,选择排序,冒泡排序!

排序算法合集(冒泡,选择,插入,堆排,快排)

C语言中的排序算法--冒泡排序,选择排序,希尔排序

图形化排序算法比较:快速排序插入排序选择排序冒泡排序

排序算法系列1--简单排序(选择,冒泡,直接插入)

算法小结-冒泡选择排序直接插入排序