• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

数据结构与算法 多种排序算法

    排序有多种,里面的算法很巧妙,不写例子,只敲些核心代码。总体的有插入,选择,交换,分配,归并五种。有些没解释的是我感觉很难或者很偏。


一、插入

    1.直接插入

     最直接明了,依次拿出排序码中的每一个,与前面的数比较大小,插入相应的位置。直至所有的数字比较完毕。


int i,j,n;
//n为排序码个数   data[n]为整个排序码组 
Node temp;
for(i = 1; i < n; ++i){
	temp = data[i];
	for(j = i-1; temp.value < data[i].value && j >= 0; j--)
		data[j+1] = data[j];//从取出的数字后面开始往前面取,比该数字大的往前移
	if(j != i -1) data[j+1] = temp; //如果循环中取出的数字保持原位不动 则不用更改 
}


    2.二分法插入


不用依次对比,如果前面的排好序,只需要找到前面排序码组的中间数,数大则在中间的前面,反之即后。

int i,j,n,left,right,middle;
//n为排序码个数   data[n]为整个排序码组 
Node temp;
for(i = 1; i < n; i++){
	temp = data[i];
	left = 0; 
	right = i-1;
	while(left <= right){
		middle = (left + right )/2;
		if(temp.value < data[middle].value)
			right = middle -1;
	    left = middle + 1;	
	}
	for(j = i-1; j >= left ; j--)
		data[j+1] = data[j];/
	if(left != i -1) data[left] = temp; //将找到的这个位置放进temp 
}


3.表插入排序。


4.shell排序。

这个是D.L.Shell提出,而他的时间复杂度的东西在《计算机程序设计艺术》有提到,盖茨说过,如果把这一套书读懂,可以直接把简历发给他。


二、选择排序

    1、直接排序。

最直接的方法,挑出排序码数组最小的数,放在第一位。再在剩余的数中挑出最小,放在第二位,很是直接,很简单。


   2.堆排序。


三、交换排序。

    1.冒泡排序。

很经典,像鱼泡一样的东西。

int i,j,n,turn;
//n为排序码个数   data[n]为整个排序码组 
Node temp;
for(i = 1; i < n; ++i){
	turn = 1;
	for(j = 0; j < n -i -1 ; j++){
		temp = data[j];
		data[j] = data[j+1];
		data[j+1] = temp;
		trun = 0;
	}
	if(turn) break;//当已经排好序后,后面无需再比较 
}	



2.快速排序。


四、分配排序

1.基数排序


五、归并排序

1.内排序

和shell排序很像,但是shell是以一个数字进行跳跃对比,而内排序是一块和一块对比。


2.外排序。

复杂。。。。。。



                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   


 

posted @ 2013-08-17 21:48  Class Xman  阅读(188)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3