排序
ZhanG01MinG
计算机科学与技术本科大三在读
展开
-
快速排序—QuickSort
快速排序是一个十分著名的排序算法,也是O(n log n)级别的排序算法。 其思想就是把数组分为三个部分,v——小于v的部分———大于v的部分。 这样分类后,再分别对小于v的部分,大于v的部分再进行一次递归,就完成了排序。 我们把第一个元素作为v, v =arr[i]; l为数组的第一个位置; 把除去v的区间中的第一元素的索引设为i; 设 j为小于v的区间的右闭区间,...原创 2018-11-09 17:20:34 · 156 阅读 · 0 评论 -
选择排序-SelectionSort
public static void sort(Comparable[] arr){ //此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。 int n = arr.length; for( int i = 0 ; i < n ; i ++ ){ // 寻...原创 2018-11-08 18:41:02 · 506 阅读 · 0 评论 -
插入排序-InsertionSort
public static void sort(Comparable arr[]) { int n = arr.length; // for (int i = 0; i < n; i++) { // for( int j = i; j > 0 && arr[j].compareTo(arr[j-1]) < 0 ; j--) // ...原创 2018-11-08 19:00:54 · 178 阅读 · 0 评论 -
归并排序—MergeSort
归并算法是O(n log n)级别的算法。空间上需要开辟一个与其同样大的数组。 其思想是分治法。 分治思想,将数组,分为一半,再细分一半......一半。将数组分成几部分排序, 最后是两个元素之间的比较。 arr [ left++ ] 与 arr [ mid++ ]两个索引在大小之间一较高下,谁大,谁先排序。 public class MergeSort { privat...原创 2018-11-08 22:26:33 · 121 阅读 · 0 评论 -
LeetCode.题号147.对单链表进行排序
public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } // 链表节点的构造函数 // 使用arr为参数,创建一个链表,当前的ListNode为链表头结点 public ListN...原创 2018-11-21 17:32:03 · 328 阅读 · 0 评论 -
堆排序——HeapSort
堆排序用到的是最大堆这种数据结构的特点。 最大堆也就是一个完全二叉树,其满足孩子节点都不大于其父节点———最大堆。 孩子节点都不小于其父节点———最小堆。 当完成一个最大堆或最小堆时,二叉树的顶点一定是最大的元素或者是最小的元素。这样每次取其顶点,就能完成堆排序。 因为树的顶点是以1开始计算的,所以为了方便,我们创建一个树的结构的类。 用data保存数值,用count表示节点,capac...原创 2018-11-17 21:27:05 · 152 阅读 · 0 评论