排序算法
ziyonghong
爱编程有追求的热血青年
展开
-
数列的逆序对
一、暴力遍历法最从前向后依次统计每个数字与它后面的数字是否能组成逆序数对。用到了双循环,时间复杂度为O(N^2)。for (i = 0; i < len; i++){ for (j = i + 1; j < len; j++){ if (a[i] > a[j]) nCount++; }}二、归并排序法比如合并数列(1,3,5...原创 2020-04-03 11:31:32 · 532 阅读 · 0 评论 -
LeetCode中桶排序问题
桶排序原创 2020-03-04 23:06:53 · 972 阅读 · 0 评论 -
TopK问题之堆排序
堆排序用于求解 TopK Elements 问题,通过维护一个大小为 K 的堆,堆中的元素就是 TopK Elements。当然它也可以用于求解 Kth Element 问题,因为最后出堆的那个元素就是 Kth Element。 快速选择也可以求解 TopK Elements 问题,因为找到 Kth Element 之后,再遍历一次数组,所有小于等于 Kth E...原创 2020-03-01 20:59:53 · 288 阅读 · 0 评论 -
简单算法:冒泡排序与选择排序
1.冒泡法排序时,需要将数组中前后元素两两比较,如果符合if条件(大于或小于),则交换两个数,否则,比较下两个元素的大小,依次执行。执行一次循环,可以找到当前数组中最大(或最小)的一个元素,然后问题规模变小,继续同样的原理找出len-1个元素里的最大值,使之成为第二大元素,依次执行,需要在外层嵌套一层循环。2.选择排序则是用一个标志记录下循环一趟后的最小值或最大值,在与第1(2,3,4....原创 2018-05-19 10:39:52 · 251 阅读 · 0 评论 -
快速排序
快速排序的基本思路:选取一个记录作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于枢轴,另一部分都大于枢轴。然后继续对这两部分继续进行排序,直到整个序列达到有序。整个快排的过程就ke简化可以一趟排序的过程,然后递归调用就行了。(注:递归过程一定要有出口,即递归结束条件)一趟排序的方法:1,定义i=0(low),j=A.lenght-1(high),i为...原创 2018-07-25 10:32:43 · 17935 阅读 · 9 评论 -
合并排序
合并排序是一种分而治之的思想。将待排序元素分成两半,分别对两半进行排序,最终将排好的两半又合并。实现代码如下:public class MergeSort { public static void mergeSort(int a[], int left, int right) { if (left < right) {// 至少有两个元素 int mid = (l...原创 2018-08-03 14:37:59 · 290 阅读 · 0 评论 -
图解归并排序
核心思想:分治法,将已有序的子序列合并,得到完全有序的序列。1. 图解过程归并过程:合并两个有序数组:2.代码实现public static void mergeSort(int[] arr) { sort(arr, 0, arr.length - 1);}public static void sort(int[] arr, int L, int ...原创 2019-10-06 19:17:03 · 168 阅读 · 0 评论