博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法总结
阅读量:5093 次
发布时间:2019-06-13

本文共 3088 字,大约阅读时间需要 10 分钟。

1.桶排序

public static void BucketSort(int[] nums){        //这里需要知道数组的最大值,作为桶的个数        int[] buckets = new int[11];        //装桶        for (int i = 0; i < nums.length; i++) {            buckets[nums[i]]++;        }        int j = 0;        //出桶        for (int i = 0; i < buckets.length; i++) {            while (buckets[i]>0)            {                nums[j] = i;                j++;                buckets[i]--;            }        }        System.out.println(Arrays.toString(nums));    }

2.冒泡排序

public static void Bubble(int[] nums){        /*        冒泡和选择的区别是:        冒泡是从上到下依次确定好每个位置的数字,每次把较小的数字交换到上边        选择是每次找到最小数字,然后放到应该的位置         */        //冒泡次数是数组长度,每次冒泡都确定顶部一个位置的数字        for (int i = 0; i < nums.length-1; i++) {            //每次都是从数组底部开始取,依次向上            for (int j = nums.length-1; j > i ; j--) {                if (nums[j]

3.选择排序

public static void SelectionSort(int[] nums){        //每次从当前最开始位置(每次都往下一个)开始,找到最小的数,排到上边        for (int i = 0; i < nums.length-1; i++) {            //记录最小数的index            int min = i;            for (int j = i+1; j < nums.length; j++) {                //更新最小数index                if (nums[j]

4.三数取中快排

public static void QuickSort(int[] nums,int lo,int hi){        if (lo>=hi) return;        //三数取中进行选择基准值        int mid = (lo+hi)/2;        if (nums[mid]>nums[hi])            swap(mid,hi,nums);        if (nums[lo]>nums[hi])            swap(lo,hi,nums);        if (nums[mid]>nums[lo])            swap(lo,mid,nums);        //现在lo位置是中间数        int left = lo;        int right = hi;        while (lo
=nums[left] && lo

 5.归并排序

/*    思路就是将两个有序数组进行组合,通过递归得到左右排序好的数组     */    //组合函数    public void combine(int[] a,int sta,int mid,int end,int[] res)    {        int f = sta;        int sta2 = mid+1;        int i = 0;        //两个数组都没有遍历完        while (sta<=mid&&sta2<=end)        {            if (a[sta]

6.堆排序

public void sort(int[] nums)    {        //要设置一个变量记录当前堆的大小,每次取数,堆会少最后一个节点        int l = nums.length;        //构建大根堆,降序则构建小根堆。大根堆是一个完全二叉树,且父节点一定不小于子节点        //数组一开始可以看成一个堆,不过需要调整。从最后一个非叶节点开始调整,调整到根节点        //最后一个非叶节点的index是n/2-1;        for (int i = (l/2)-1; i >=0 ; i--) {            adjust(nums,i,l);        }        //开始取数        while (l>1){            //取数就是把最大的数(堆顶)放到最后,然后最后那个节点就脱离堆(尺寸-1)            swap(nums,0,l-1);            l--;            //每次交换结束都要进行调整            adjust(nums,0,l);        }    }    public void adjust(int[] nums,int index,int size){        /*        输入的是待调整堆和调整范围(从index节点处开始调整,默认前边是调整好的)         */        //获取完全二叉树中子节点的index        int l = index*2+1;        int r = index*2+2;        int max = index;        //找到这一家庭中最大值是谁,有可能有的孩子不存在,所以要判断        if (l

 7.插入排序

public void sort(int[] nums){        /*        从前两个开始,排好序,以后从第三个开始后,前边的就是都排好的了,大的数往后挪,知道找到当前数的位置         */        if (nums.length<2) return;        //外层代表当前数        for (int i = 1; i < nums.length; i++) {            int temp = nums[i];            int j = i-1;            while (j>=0&&temp

8.希尔排序,希尔排序是在插入排序的基础上做的优化

请看大牛整理的:https://www.cnblogs.com/chengxiao/p/6104371.html

转载于:https://www.cnblogs.com/stAr-1/p/8519471.html

你可能感兴趣的文章
python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property...
查看>>
AIR SDK 更新方法
查看>>
HttpComponents HttpCore 4.3 Alpha1 发布
查看>>
PacketFence ZEN 4.0.1 发布,网络接入控制
查看>>
两个小的java程序,用于练习java基本语法
查看>>
MySql is marked as crashed and should be repaired问题
查看>>
CentOS设置时间
查看>>
java 批量导入图片到excel
查看>>
B树和B+树的总结
查看>>
【ubuntu】配置zsh
查看>>
怎样用通用pe工具箱制作U盘启动盘
查看>>
在ubuntu16.04-32bits 下编译vlc和vlc-qt开源项目
查看>>
转:你真的懂iOS的autorelease吗?
查看>>
Linux学习——磁盘分区管理
查看>>
H5C302
查看>>
给 Android 开发者的 RxJava 详解
查看>>
设计:抽象类类还是接口
查看>>
解决 jsp:include 引用文件时出现乱码的问题
查看>>
712. Minimum ASCII Delete Sum for Two Strings
查看>>
C++ json解析
查看>>