算法
凯凯兹
code..
展开
-
堆排序-排序算法(七)
堆排序实现思路将数组按照堆(最大堆、最小堆都可以)的结构进行整理源数据:73,6,72,88,85,83,48,60,57,42整理后:88,85,83,60,73,72,48,6,57,42此时已经是一个最大堆,第一个元素,肯定是最大的,循环删除堆最大值,删除最大值把堆重新建立,把删除的值保存在另一个数组中建立堆,logN,共建立N次额外开辟一个数组存放结果此时,时间复杂度为O(NlogN),空间复杂度为O(2N),不划算呐优化版:下面a为数组,size为数组长度将数组按原创 2020-07-26 20:22:33 · 131 阅读 · 0 评论 -
归并排序-排序算法(六)
归并排序前言基本思想归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。首先考虑下如何将2个有序数列合并。这个非常简单,只要从比较2个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。下面是归并的一个demo//将有序数组a[]和b[]合并到c[]中void MemeryArray(int a[], int n, int b[], int m, int c[]){ in原创 2020-07-25 16:09:07 · 101 阅读 · 0 评论 -
快速排序-排序算法(五)
快速排序前言先从数列中取出一个数作为key值;将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;对左右两个小数列重复第二步,直至各区间只有1个数。基本思想初始时 i = 0; j = 9; key=7272657886042837348850123456789由于已经将a[0]中的数保存到key中,可以理解成在数组a[0]上挖了个坑,可以将其它数据填充到这来。从j开始向前找一个比key小的数。当j=8,符原创 2020-07-25 14:43:48 · 120 阅读 · 0 评论 -
希尔排序-排序算法(四)
希尔排序前言数据序列1: 13-17-20-42-28 利用插入排序,13-17-20-28-42. Number of swap:1;数据序列2: 13-17-20-42-14 利用插入排序,13-14-17-20-42. Number of swap:3;如果数据序列基本有序,使用插入排序会更加高效。基本思想在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。实现过程原创 2020-07-19 20:38:07 · 217 阅读 · 0 评论 -
插入排序-排序算法(三)
插入排序基本思想在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。实现过程代码实现public static void insert_sort(int array[],int lenth){ int temp; for(int i=0;i<lenth-1;i++){ for(int j=i+1;j>0;j--){ if(array[j]原创 2020-07-19 18:32:25 · 161 阅读 · 0 评论 -
选择排序-排序算法(二)
选择排序基本思想在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;第二次遍历n-2个数,找到最小的数值与第二个元素交换;。。。第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。过程图解算法特点稳定平均时间复杂度:O(n2)额外空间复杂度:O(1)最坏情况时间复杂度:O(n2)最好情况时间复杂度:O(n2)代码实现public static void select_sort(int array[],int lenth){原创 2020-07-19 16:06:25 · 123 阅读 · 0 评论 -
冒泡排序-排序算法(一)
冒泡排序基本思想两个数比较大小,较大的数下沉,较小的数冒起来。过程比较相邻的两个数据,如果第二个数小,就交换位置。从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。继续重复上述过程,依次将第2.3…n-1个最小数排好位置。来个代码实现一下:public static void BubbleSort(int [] arr){ int temp;//临时变量 for(int i=0; i<arr.length原创 2020-07-19 15:57:56 · 231 阅读 · 0 评论