排序算法
咻哈
为了能更好更快乐的学习而学习,我已经能快乐的学习了。
展开
-
-堆排序-
/* * 堆排序 */ public class HeapSort { @Test public void heapC(){ int[] arr = new int[]{1,2,3,4,5,6,1}; //arr下标从0~n-1 // 根节点最后一个父节点的序号为,(arr.length-1)/2,向自己及自己的子树调整出最大根, for(int i=(arr.length-1)/2;i>=0;i--){ .原创 2021-06-04 10:23:47 · 91 阅读 · 0 评论 -
快速排序
快速排序 算法思想: 每次从序列中找一个元素出来,然后以该元素为标准,把序列中比该元素小的元素,放在该元素左边,比该元素大的元素放在该元素右边。然后对左右两个序列继续递归,直到左右两个序列中只剩一个元素或没有元素时 时间复杂分析: 平均是O(nlogn) , 最坏是O(n^2) 我们可以把该算法看成一个树,按照平均来算,及每一次调用处理的数据都是n,但树的高度,与每次选取的标准元素有...原创 2020-01-03 17:44:25 · 134 阅读 · 0 评论 -
插入排序1------直接插入排序
直接插入排序思想: 给A序列排序(由小到大),从A序列中,依次取A序列的元素出来,与已经排好的序列(B序列)从后往前依次进行进行比较。当然B序列可以为空。便于理解才相像成两个序列,实际完全是可以在一个序列中完成排序操作。 1.如果B为空,则直接把A的待比较的元素,放到B中。 2.如果该元素比B序列最后一个数大,则将其加到最后有序列末尾,然后继续从A序列中拿元素进行比较,直到全部比较完...原创 2019-08-03 20:50:37 · 154 阅读 · 0 评论 -
插入排序2------折半插入排序
算法思想:(看完这个,看程序应该能看懂) 假设:A序列无序,B序列有序(升序),从A序列依次取出元素(x)与B序列位于中间位置的元素(temp)进行大小比较. 1.如果x>temp,则取temp与序列末尾之间的中间元素进行比较, 2.如果x<temp,则取序列首部与temp之间的中间元素进行比较, 3.在1、2步骤间循环比较。每一次比较后都缩...原创 2019-08-04 20:58:33 · 177 阅读 · 0 评论 -
插入排序3------希尔排序
算法思想:(缩小增量排序) 将一个序列分成多个子序列,然后每个子序列进行直接插入排序,其中增量的选取控制着子序列的生成。如果增量是1,就是直接插入排序。 相比前两种插入排序: 希尔排序的每趟排序都会使整个序列变的更加有序,多次排序,效率更高。 缺点: 希尔排序是不稳定排序。因为分割组序列进行排序,所以会存在相同大小元素,位置颠倒...原创 2019-08-05 21:47:21 · 229 阅读 · 0 评论 -
交换排序---------冒泡排序
算法思想: (升序) 从序列开始到末尾,将Ai与A(i+1)项逐对进行比较,如果Ai > A(i+1),则将他们互换,直至比较到An,这样每一轮交换后都能将一个最大的数放至序列末尾,经过n-1次比较就将所有数排好序了。(因为每一轮排序都找出一个最大的,所以经过n-1轮排序,就将n-1个数排好了,最后剩的那个数就是最小的,不用再比较了) 例子: A序列:3 6 5 4 ...原创 2019-08-09 23:18:00 · 126 阅读 · 0 评论