- 博客(9)
- 收藏
- 关注
原创 基数排序(java实现)
基础思路:(用空间换时间) 1.首先有10个桶,因为用的是十进制数 2.每一趟呢就按位数的值i存在第i个桶里,然后再取回原数组 3.会有多少趟?看最大数的位数,假如最大数为345此时最大位数n=3,有3趟 来看看动图分析 看代码详解: public static void jishu(int nums[]){ // 求最大数 int max=nums[0]; for (int i = 1; i < nums.length ; i+...
2021-12-03 21:20:05 342
原创 归并排序(java实现)
基本思路: 1.整体分为分 - 治 2.分,怎么分?通过递归向下分,到只有两个数比较为止 3.治,如何治?递归回溯向上合并,在分到最底部开始, a.比较两个数大小,并使用一个临时数组temp临时储存 b.如果两个序列(最少有1个值)比较完,一方序列还有值,就将剩余的全部放到临时数组temp c.将临时数组的值再copy到原数组 上图: 下面这张图是回溯上去后最后一次合并,并不是只有一次合并 再来看上图,这次排序其实有数组长度-1次合并,分别是8 4,5 7,1 3,...
2021-12-02 20:59:44 921 3
原创 快速排序(java实现)
快速排序也是选择排序的一种,是冒泡排序的改进版 基础思想: 1.首先,会有一个基准值和一个左指针以及右指针 2.指针跟基准值比较,小的放在基准值左边,大的放右边 3.这样就会分成左边一个值小的分区和右边值大的分区 4.使用递归重复1,2的操作,直到每一个小分区只有1个数据 动图如下: 看代码: public static void quicksot(int nums[],int left,int right){ // 递归退出条件 if (le..
2021-11-29 20:10:52 448
原创 希尔排序(java实现)
希尔是插入的一种优化算法,也叫缩小增量法 基础思路: a.不断分组分到最后一组再进行其他排序 b.分组不断/2,直到为1 图示如下: 我们再来看看动图: 代码如下: public void winxier(int num[]){ // 跟插入排序区别不大,外面加了个循环分组 // 分组 for (int fenzhu = num.length/2; fenzhu >0 ;fenzhu/=...
2021-11-27 18:16:48 193
原创 插入排序(java实现)
基础思路: 1.将整个数组分为两个分区,left有序区,和right无序区 2.左分区的数跟右分区一个一个比较,小于左分区,就左分区比较的那个值向后挪动 3.循环结束证明右分区的值大于左分区,此时leftindex+1才是插入的下标位置 动图演示: 代码如下: public void insert(int nums[]){ for (int j = 1; j <nums.length; j++) { //定义右边无序...
2021-11-27 18:10:46 198
原创 简单选择排序
跟冒泡有丢相似的地方,冒泡大的往后冒,选择是小的往前选,外循环表示交换多少轮,内循环表示找到最小值,两次循环时间复杂度为O(n^2) 思路: (1)有数组大小-1轮排序 (2)每一轮排序又会通过循环找到一个最小值 (3)如第一轮找到最小值(1--length)与第一个值a[0]交换,第二轮排序就从 (2--length)里找最小值,找到后与a[1]交换 (4)初始化时定义一个最小值和最小值下标 public static void winxuanzhe...
2021-11-27 18:03:05 162
原创 冒泡排序(java实现)
抽象理解就像是,像泡泡一样把大的往后冒 话不多说直接上代码 public static void sortwin(int a[]){ int zhuan=0; // 标记后面一轮是否有过交换 boolean T=false; // 所有论 for (int j = 0; j <a.length-1; j++) { // 一轮循环 for (int i = 0; i <a.length-1-j ; i++) ...
2021-11-27 17:57:11 531 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人