排序算法
new___Smile
java开发一年。学习之路不止。。。
展开
-
排序算法个人笔记1
1、冒泡算法 这个算法代码比较简单,它的核心是做第i轮排序就会把第i大的值放到后面,比如第一轮将最大的值放到最后,第二轮将第二大的值放到倒数第二。时间度复杂度为O(n的平方),空间复杂度为O(1),可以进行的优化是在第一个for循环时声明一个布尔值变量用来判断是否在第二个for循环中进行了交换变值,如果没有就认为此时的序列已经是有序的。2、选择排序 这个算法是先定一个k 再用j往后找到比k小的原创 2016-03-02 22:56:51 · 498 阅读 · 0 评论 -
排序算法之带二分查找的插入排序
带二分查找的插入排序要借助3个游标,low mid high来确定temp这个要插入的新元素的位置,在lowtemp的时候就说明temp在mid的左边,即把high改成mid,因为mid此时一定大于temp,所以进行优化将high改为mid-1,反之,就将low改为mid+1.通过循环可以得到新元素的位置是high+1.将a[high+1]=temp赋值。并将[high+1,i]区间的所有元素往后原创 2016-03-06 10:50:43 · 2075 阅读 · 0 评论 -
排序算法之希尔(优化冒泡)排序
希尔排序是用来优化其他算法的,进行分组,初始的gap等于n/2,然后依次减半,直到最后取1.这个1有点特别,如果直接放里面会导致死循环。在分组的for循环里面有点不方便,所以在后面进行for循环代码修正,单独写变量的增值。用if来解决这个死循环的问题。分组后进行冒泡,进行gap分组内的值-1此冒泡,同时进行优化,否则当gap=1时就是冒泡排序了,在组内排序,每次比完就加gap,跳过的比。希尔排序的原创 2016-03-06 11:27:54 · 1009 阅读 · 1 评论 -
排序算法之经典快排(重点)
算法特点,以某个记录为届(该记录称为支点活枢轴),将待排序列分成两部分:一部分大于等于支点记录的关键字,另一部分小于支点记录的关键字。意思就是每次排完一趟,左边的比枢轴小,右边的比枢轴大。游标high用于搜索比枢轴小的记录,游标low用于搜索比枢轴大的记录,搜索就和枢轴交换并切换游标。 大概意思就是把数组分为两个子数组和一个元素,在子数组当中继续进行,递归操作。在ACM使用的快排中,我们确定枢轴,原创 2016-03-06 11:46:37 · 1255 阅读 · 0 评论 -
排序算法之归并算法
归并多用于数据放在不同的地方(数组,文件 ,网络)我们要将其合在一起汇总排序。这些不同地方的数据是有序的,我们再造一个空间是两个数据的长度之和(这里我写的是二路归并)。每次拿两个数据的第一个来比较,谁小依次就放到新开的空间当中,继续比较放值。(每次都是两个数据的头来比较,比一个放一个,边读边比,速度很快的)。这里还有一个很好玩的东西,那就是用一个临界点来控制两个递归,一个分解递归一个合并递归。稍微原创 2016-03-06 12:08:22 · 329 阅读 · 0 评论 -
排序算法扩展之对象排序
今天我们要学一个好玩的东西,那就是对象排序,之前都是对整数数组进行排序,今天我们就来做一个对象排序。这个核心思想就是借用关键字进行比较,以及开一个临时对象进行指针交换来达到排序效果,这里我写一个冒泡对象排序实例:在这个实例中,我们借用关键字Key来进行比较排序。通过指针的交换来达到数值捆绑,同时这里也用到一个小的知识点那就是私有的变量我们要写get函数来获得。每个对象中要写tostring用来输出原创 2016-03-06 19:59:20 · 1221 阅读 · 0 评论