博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构与算法 多种排序算法
阅读量:4582 次
发布时间:2019-06-09

本文共 1372 字,大约阅读时间需要 4 分钟。

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

一、插入

    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.外排序。

复杂。。。。。。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

 

转载于:https://www.cnblogs.com/james1207/p/3265207.html

你可能感兴趣的文章
js return的用法
查看>>
子节点填充父元素除去一固定高度后的剩余高度
查看>>
[原]IOS 后台发送邮件
查看>>
(转)JAVA Calendar详解
查看>>
转: 编码,charset,乱码,unicode,utf-8与net简单释义
查看>>
C#--正则匹配
查看>>
5.30 考试修改+总结
查看>>
BA-设计施工调试流程
查看>>
C#-CLR各版本特点
查看>>
css3背景透明文字不透明
查看>>
《java JDK7 学习笔记》之接口与多态
查看>>
LeetCode 96:Unique Binary Search Trees
查看>>
kernel-char设备的建立
查看>>
DVWA-CSRF
查看>>
ubuntu common software introduction
查看>>
资源相互引用时 需添加 PerformSubstitution=True
查看>>
MapRedece(单表关联)
查看>>
蒲公英App开发之检测新版本
查看>>
【安卓基础】倒计时按钮封装(验证码倒计时按钮)
查看>>
configparser模块
查看>>