排序
浮萍一叶舟
科班出身,欢迎技术交流,共同学习进步
展开
-
快速排序
快速排序快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。思想从数列中挑出一个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数原创 2020-11-26 14:20:33 · 192 阅读 · 0 评论 -
归并排序
归并排序归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。思想把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序列合并成一个最终的排序序列。图示代码public static int[] guibing(int[] arr,in原创 2020-11-26 14:17:04 · 164 阅读 · 0 评论 -
希尔排序
希尔排序思想先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;按增量序列个数k,对序列进行k 趟排序;每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。图示代码function shellSort(arr) { var len = arr.length;原创 2020-11-26 14:13:42 · 175 阅读 · 0 评论 -
选择排序
选择排序思想在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;第二次遍历n-2个数,找到最小的数值与第二个元素交换;。。。第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。图示代码public static void select_sort(int array[],int lenth){ for(int i=0;i<lenth-1;i++){ int minIndex = i; for(int j=i+1;j&原创 2020-11-26 14:10:00 · 182 阅读 · 2 评论 -
冒泡排序
冒泡排序思想比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。图示代码public static void BubbleSort(int [] arr){ int temp;//临时变量 for(int i=0; i<arr.length-1; i++){ //表示趟数,一共arr.le原创 2020-11-26 14:06:42 · 191 阅读 · 0 评论 -
插入排序
插入排序思想插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 。图示代码public static void insert_sort(int array[],int lenth){ int temp; for(原创 2020-11-26 13:56:54 · 148 阅读 · 0 评论 -
堆排序,我可算是明白了
堆排序从入门到精通吾学堆良久,阅百篇文章,然而未曾见一篇详尽其精髓,便属此文,以便他人学习,如有不足,还望大佬多多赐教。啥是堆?堆是一种数据结构,是一种完全二叉树啥是完全二叉树?尽量满足一个根节点有两个叶节点,(如果都满足了,就是满二叉树),如果满足不了,紧着最左边的使用,也就是说只有最后一层可以出现单节点的情况,而且是右侧不能出现单节点而左侧没有节点的情况。感觉说的不咋好,画个图来说明一下,如上图所示,圆心的数字顺序即代表着添加叶子的顺序,从上到下,从左到右,依次进行,此时,这个就是一个完全原创 2020-09-02 19:22:13 · 461 阅读 · 0 评论 -
插入排序及其变换
插入排序思想数组中依次遍历,从左到右(反过来也可以,只是很少有人那么干),遍历的第一个元素,假定为有序的,从第二个开始,依次和左侧的数进行比较,根据比较规则进行替换,就这样依次作比较,最终得出一个有序的数组代码:java实现public static int[] doInsertSort(int[] array) { if(array.length <= 1) return array; for (int i = 1; i < array.length; i++) { in原创 2020-06-19 17:33:59 · 146 阅读 · 0 评论