排序算法
介绍常用的排序算法,一定要掌握!
EamonHu
这个作者很懒,什么都没留下…
展开
-
排序算法之希尔排序
希尔排序基于插入排序public static void shellSort(int[] nums){ for(int gap = nums.length/2; gap > 0; gap /= 2){ for(int i = gap; i< nums.length; i++){ for(int j = i; j>=gap &...原创 2020-04-01 21:18:24 · 491 阅读 · 0 评论 -
排序算法之堆排序
堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆必须满足以下两个性质:是一颗完全二叉树什么是完全二叉树?首先满足1.除了叶子结点其余结点都有左右孩子。2.在最后一层的结点,连续集中在最左边。每个结点的值都大于或等于其左右孩子结点的值大于或等于是大顶堆小于或等于是小顶堆...原创 2020-03-26 15:05:30 · 524 阅读 · 0 评论 -
排序算法之快速排序
思路找到一个基础值,一般取第一个。从右向左找,找到第一个比基准值小的数停下来;从左向右找,找到第一个比基准值大的数停下来;交换这两个数;继续2-4步进行下一轮的查找替换,直至在基准数的左边都比基准数小,右边都比基准数大。以基准数为界,分成左右数组,分别进行1-5操作。经典快排实现public class QuickSort { public static void qu...原创 2020-03-26 14:28:04 · 639 阅读 · 0 评论 -
排序算法之插入排序
类似于打扑克牌:取未排序的数据第一个,在已排序的序列中从后向前扫描,找到相应位置插入public static void insertSort(int[] nums){ for(int i = 1; i< nums.length; i++){ for(int j = i; j > 0; j--){ if(nums[j] < num...原创 2020-03-25 08:07:00 · 471 阅读 · 0 评论 -
排序算法之归并排序
思路归并排序是用的分治思想。让左右两部分先有序,然后将左右两个有序部分合并为新的有序部分。如何让左右两部分有序:接着分左右部分。实现public class MergeSort { //两路归并算法,两个排好序的子序列合并为一个子序列 public void merge(int []a,int left,int mid,int right){ int []t...原创 2020-03-25 08:06:02 · 534 阅读 · 0 评论 -
排序算法之选择排序
选择排序首先找到元素中最小的那个元素其次,将它和第一个元素交换位置再次,在剩下的元素中找到最小的元素和数组中第二个元素交换位置。如此往复,直到数组排序(每次从待排序元素中选择最小者或最大者)。public static void selectionSort(int[] a){ int N = a.length; if(N < 2) return; ...原创 2020-03-25 08:04:40 · 638 阅读 · 0 评论 -
排序算法之冒泡排序
比较相邻的元素。如果相邻两个元素前面比后面大,则交换两个元素。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。第一轮排序后,最后的元素是数组中最大的数。针对所有的元素重复以上的步骤。public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) return; fo...原创 2020-03-25 08:03:37 · 500 阅读 · 0 评论