数据结构之排序算法
来源:互联网 发布:king最新域名 编辑:程序博客网 时间:2024/06/06 00:35
学过好久的东西,感觉都忘记的差不多了,虽然可能日常写代码的过程之中也可能写过一些算法,但是从来都没有规整,最近忙里偷闲,写点关于排序的算法,当然好多人都写过一些很不错的算法blog,我写一下,只是方便自己日后查看,当然也给有需要的朋友一些参考,欢迎指正
排序算法有:冒泡排序,选择排序,插入排序......(未完待续)
1.冒泡排序: 很明显,最下面的(或者说一个,当然如果想倒序排列,则算法反一下)依次往上比较找到最大的,放后面
(1)取第一个元素,依次与后面的比较,大的往后去,小的往前走直到最大的放在最后面
(2)取第一个元素,依次与后面的比较,与(1)一样,问题在于此时最后一个一定是最大的,因为你知道,所以第二次查找的时候就需要比较到第n-2(假设一共n个元素),这个时候应该会写一个控制吧
(3)重复上面内容,此时存在两个for循环,一个依次比较,一个控制比较到什么位置,后面的一定会是大的了
ok,一般的写法就是这样,没啥大问题,我还写(4)当然也是看的别人的
(4)假如第1个 < 第二个,第2个 < 第3个,第3个<第4个......呀,他们是本身就是有序的啊,那我们压根就不需要排序了,此时需要加一个flag 控制是否 需要新排序
上代码
/// <summary> /// 冒泡排序 /// 取出第0个第1个,进行比较,如果a > b,则交行位置,否则继续取第1个与第2个,直到最后一个 /// 从头取第0个第1个,进行比较,如果a>b,则交换位置,否则继续取第1个与第2个,直到倒数第二个(因为最后一个一定是最大的了已经) /// flag 标识符,确定是否当前排序已经正常 /// </summary> void SortOutBubble() { int[] numberArr = { 10, 88, 21, 4, 94, 75, 324, 947 }; int i, j, flag = 1; //如果flag = 0,则表示未排序的数字事实上已经符合排列标准了,就不需要再次遍历了 for (i = 1; i < numberArr.Length && flag == 1; i++) { //i=1用来控制总的遍历次数(n个元素,事实上遍历n-1次 一次取俩,所以赋值1) flag = 0; for (j = 0; j < numberArr.Length - i; j++) { if (numberArr[j] > numberArr[j + 1]) { int temp = numberArr[j]; numberArr[j] = numberArr[j + 1]; numberArr[j + 1] = temp; flag = 1; } //如果没有交换的泡泡,flag = 0说明各个顺序已经对了,不需要再次遍历 } } //此处可以打印log }未完待续
0 0
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- 数据结构之排序算法
- Android Studio开发环境建立aidl文件,怎么生成相应的java文件?
- 内核裁剪问题汇总
- SharePoint 2013 开发——开发并部署第一个APP
- oracle 11g 修改sysman密码后,em无法连接数据库的解决办法
- Hadoop 1.0.3 集群搭建
- 数据结构之排序算法
- php面向对象(OOP)—__autoload()函数
- eclipse调试的方法和技巧
- excel数据导入oracle
- android app开发思考碎片
- CentOS6.5分区与文件系统
- httpurlconnection
- 《大话设计模式》--无熟人难办事?--迪米特法则<Lod>(11)
- 通过反射获取实体的一切属性