您的位置:首页 > 编程语言 > C语言/C++

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

2013-04-09 20:45 731 查看
最近打算抽时间复习数据结构,怎奈琐事繁杂,难以抽出时间,但又定下每天计划,故,第一天就写个最简单的几种排序算法的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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐