冒泡排序、插入排序、选择排序--C语言实现

来源:互联网 发布:宜家值得买 知乎 编辑:程序博客网 时间:2024/06/05 20:09

            最近打算抽时间复习数据结构,怎奈琐事繁杂,难以抽出时间,但又定下每天计划,故,第一天就写个最简单的几种排序算法的C语言实现吧。


            记得当时,最初接触排序,学会的第一个方法就是冒泡排序,这个也是我觉得最简单的排序方法。

            简单描述就是,先比较k1和k2,然后比较k2和k3,...,kn-1和kn。

           一遍比较下来,就确定了  n - i - 1个元素中最大的元素。

           在执行n-1次即可。

           

//冒泡排序void popSort(int * a){    for(int i = 0;i < LEN;i++){        for(int j = 0;j < LEN - i - 1;j++){             if(a[j] > a[j+1]) {                  int tmp = a[j+1];  a[j+1] = a[j];  a[j] = tmp; }}}//打印结果myprint(a);}

       

              第二个是插入排序,插入排序是模拟我们打扑克调牌的过程,假设左手拿牌,右手摸牌。右手摸了第一张牌之后,左手拿着。摸了第二张牌后,再插入左手的牌中之前,需要和左手中的牌比较,选择查到后面还是前面。后面再摸牌就一样了。

             

//插入排序void insertSort(int * a){   for(int i = 1;i < LEN;i++)   {       int flag = a[i];     int j = i-1;   while(j >= 0 && a[j] > flag)   {   a[j+1] = a[j];   a[j] = flag;   j--;   }   }   //打印结果myprint(a);}

             第三个是选择排序,选择排序也是比较好理解的排序方法,它就是选择给定范围内的所有中的最小(最大)的一个放在最小(最大)的应该放的位置。

         

//选择排序void selectSort(int * a){   for(int i = 0;i < LEN;i++)   {        int min = i;//在i到LEN-1之间选择最小的和i的互换位置for(int j = i;j < LEN;j++){              if(a[j] < a[min])  min = j;}int tmp = a[i];a[i] = a[min];a[min] = tmp;   }     //打印结果   myprint(a);}