排序算法
qq_45126061
这个作者很懒,什么都没留下…
展开
-
桶排序
文章目录算法描述代码演示复杂度分析时间复杂度算法描述代码演示public static int[] findNearestNumber(int[] numbers){ //1.从后向前查看逆序区域,找到逆序区域的前一位,也就是数字置换的边界 int index=findTransferPoint(numbers); //如果数字置换边界是0,说明整个数组已经逆序,无法得到更大的相同数 //字组成的整数,返回null if(index==0){ return null; } //2原创 2020-09-22 12:32:43 · 70 阅读 · 0 评论 -
基数排序
文章目录算法描述代码演示复杂度分析时间复杂度空间复杂度算法描述代码演示class Radix{ public static void main(String[] args){ int arr[]={170,45,75,90,802,24,2,66}; int n=arr.length; radixsort(arr,n); print(arr,n); } //获取数组中的最大值 static int getMax(int arr[],int n){ int max=arr[原创 2020-09-22 12:00:48 · 62 阅读 · 0 评论 -
计数排序
文章目录算法描述代码演示复杂度分析时间复杂度空间复杂度稳定性分析算法描述计数排序是一种针对于特定范围之间的整数进行排序的算法。它通过统计给定数组中不同元素的数量,然后对映射后的数组进行排序输出即可。代码演示没有优化public static int[] countSort(int[] array){ //1.得到数列的最大值 int max=array[0]; for(int i=1;i<array.length;i++){ if(array[i]>max){ max=原创 2020-09-21 11:05:08 · 60 阅读 · 0 评论 -
堆排序
文章目录算法描述代码实现复杂度分析时间复杂度空间复杂度稳定性分析算法描述把无序数组构建成二叉堆,需要从小到大排序,则构建成最大堆;需要从大到小排序,则构建成最小堆循环删除堆顶元素,替换到二叉堆的末尾,调整堆产生新的堆顶代码实现/*** @param array 待调整的堆* @param parentIndex 要下沉的父节点* @param length 堆的有效大小*/public static void downAdjust(int[] array,int parentInd原创 2020-09-21 09:59:13 · 56 阅读 · 0 评论 -
快速排序
文章目录算法描述代码演示复杂度分析时间复杂度空间复杂度稳定性分析算法描述快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。挑选:从数列中挑出一个元素,称为“基准(pivot)”划分:将比基准元素小的元素放在基准元素的左边,将比基准元素大的元素放在基准元素的右边。递归:对小于基准元素的数列和大于基准元素的数列分别进行排序代码演示双边循环法public static void q原创 2020-09-21 09:03:40 · 119 阅读 · 0 评论 -
排序算法总结(Java实现)
文章目录排序算法说明排序的定义术语说明算法总结上图名词解释比较和非比较的区别比较排序非比较排序十大排序算法冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)希尔排序(Shell Sort)归并排序(Merge Sort)快速排序(Quick Sort)堆排序(Heap Sort)计数排序(Counting Sort)桶排序(Bucket Sort)基数排序(Radix Sort)排序算法说明排序的定义对一序列对象根据某个关键字进行排序原创 2020-09-20 16:46:38 · 62 阅读 · 0 评论 -
希尔排序
文章目录算法描述过程演示代码演示复杂度分析算法描述希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止原创 2020-09-20 16:27:39 · 57 阅读 · 0 评论 -
归并排序
文章目录算法描述代码演示复杂度分析算法描述递归排序是把长度为n的输入序列分成两个长度为n/2的子序列,分别对这两个子序列采用递归排序,将两个排序好的子序列合并成一个最终的排序序列。代码演示public static void mergeSort(int arr[],int left,int right){ if(left<right) { int mid=(left+right)/2; mergeSort(arr,left,mid); mergeSort(arr,mid+1原创 2020-09-20 10:50:55 · 50 阅读 · 0 评论 -
冒泡排序
文章目录算法思想代码不考虑优化的实现方式一次优化的实现方式二次优化的实现方式复杂度分析稳定性分析算法思想冒泡排序通过不断地比较两个相邻的元素,将较大的元素交换到右边(升序),从而实现排序。代码不考虑优化的实现方式/** * Description:冒泡排序 * @param array 需要排序的数组 */public static void bubbleSort(int[] array){ for(int i=0;i<array.length-1;i++) { for(in原创 2020-09-18 10:33:14 · 59 阅读 · 0 评论 -
插入排序
文章目录算法思想代码实现复杂度分析时间复杂度空间复杂度稳定性分析算法思想插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序)。代码实现测试代码:public static void main(String[] args) { int[] array = {3, 44, 38, 5, 47原创 2020-09-14 19:47:41 · 50 阅读 · 0 评论 -
选择排序
算法思想选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。简而言之,选择排序就两步:1.选择最小(或最大)2.交换算法描述n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述如下:初始状态:无序区为R[1…n],有序区为空;第i趟排序(i=1,2,3…n-1)开始时,原创 2020-09-06 20:52:20 · 82 阅读 · 0 评论