java数据结构-排序算法-基数算法

package com.kuang;

import java.util.Arrays;

/** * @auther 付强 * @date 2020/2/15 - 10:46 */public class RadixSort {    public static void main(String[] args) {        int[] arr=new int[]{23,6,189,45,9,289,56,1,789,32,65,652,5};        radixSort(arr);        System.out.println(Arrays.toString(arr));    }    public static void radixSort(int[] arr){        //存数组中最大的数字        int max=Integer.MIN_VALUE;        for (int i = 0; i < arr.length; i++) {            if(arr[i]>max){                max=arr[i];            }        }        //知道最大数字是几位数        int maxlength=(max+"").length();        //用于存储临时数据的数组        int[][] temp=new int[10][arr.length];        System.out.println(maxlength);        //根据最大长度的数决定比较的次数        int[] counts=new int[10];        for (int i = 0,n=1; i < maxlength; i++,n*=10) {            //把每一个数字分别计算余数            for (int j=0;j<arr.length;j++){                //拿出余数                int i1 = arr[j] / n % 10;                //把当前遍历的数据放到指定的数组中                temp[i1][counts[i1]]=arr[j];                //记录数量                counts[i1]++;            }            if(i==0){                for(int []nums:temp){                    System.out.println(Arrays.toString(nums));                }                System.out.println(Arrays.toString(counts));            }            //记录取得元素需要放的位置            int index=0;            //把数字取出来            for (int i1 = 0; i1 < counts.length; i1++) {                //记录数量的数组中当前余数记录的数量不为0                if(counts[i1]!=0){                    //循环取出元素                    for (int l=0;l<counts[i1];l++){                        //取出元素                        arr[index]=temp[i1][l];                        index++;                    }                    //把数量值为0                    counts[i1]=0;                }            }        }    }}

原文地址:https://www.cnblogs.com/fuqiang-java/p/12311124.html

时间: 2024-11-13 05:52:45

java数据结构-排序算法-基数算法的相关文章

java数据结构-排序算法-前边算法整合

package com.fu; import java.util.Arrays; /** * @auther 付强 * @date 2020/2/13 - 10:27 */public class myArray1 { //用于存储数据的数组 private int[] elements; public myArray1(){ elements=new int[0]; } //获取数组长度的方法 public int size(){ return elements.length; } //往数组

Java数据结构 最短路径解法Dijkstra算法

本文为博主原创文章,未经博主允许不得转载! 1.1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等.注意该算法要求图中不存在负权边. 问题描述:在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],找到由顶点 V0 到其余各点的最短路径.(

Java数据结构和算法之数组与简单排序

一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 一维数组 一维数组(one‐dimensional array )实质上是相同类型变量列表.要创建一个数组,你必须首先定义数组变量所需的类型.通用的一维数组的声明格式是: type var‐name[ ]; 获得一个数组需要2步: 第一步,你必须定义变量所需的类型. 第二步,你必

Java数据结构 遍历 排序 查找 算法实现

1. 遍历算法(遍历二叉树6种方法) 1.1. 概述 遍历算法针对二叉树而言的,主要有先序.中序.后序三种遍历顺序,三种顺序又分别有递归和常规算法,二叉树遍历的主要思想是:遍历左子树,遍历右子树,访问根节点,由这三者的遍历顺序来确定是先序.中序还是后序.下面只要求掌握递归遍历算法,常规遍历算法见附录一. 1.2. 先序遍历算法 遍历顺序:访问根节点,遍历左子树,遍历右子树.代码如下: void preOrder(BinaryTreeNode bt) { if (bt == null)// 如果当

Java数据结构与算法之排序

排序从大体上来讲,做了两件事情: 1.比较两个数据项: 2.交换两个数据项,或复制其中一项 一.冒泡排序 大O表示法:交换次数和比较次数都为O(N*N). 算法原理: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3.针对所有的元素重复以上的步骤,除了最后一个. 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. /** * 冒泡排序 demo * */

数据结构排序算法Java实现

闲的无聊又拿起了大学的数据结构的书看起来 <数据结构(c语言版)>严蔚敏 吴伟民编著. 里面有几个排序算法,感觉挺好玩的,就想着写出来玩玩. package test.sort; /** * @Title: TODO * @Description: TODO * @author: * @date: 2014-8-10 上午11:20:43 * */ public class quickSort { private static int datas[] = {23,42,12,45,56,63,

Java数据结构和算法(九)——高级排序

春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间则是我们所不能接受的.接着我们在讲解递归 的时候,介绍了归并排序,归并排序需要O(NlogN),这比简单排序要快了很多,但是归并排序有个缺点,它需要的空间是原始数组空间的两倍,当我们需要排序的数据占据了整个内存的一半以上的空间,那么是不能使用归并排序的. 本篇博客将

Java数据结构与算法(第七章高级排序1)

希尔排序 希尔排序是计算机科学家Donald L.Shell 而得名,他在1959年发现了希尔排序算法.希尔排序基于插入排序,但是增加了一个新的特性,大大提高了插入排序的执行效率. 插入排序:复制的次数太多 由于希尔排序是基于插入排序的,所以需要回顾下"插入排除".在插入排除执行的一半的时候,标记符左边这部分数据项都是排过序的(这些数据之间是有序的),而记右边的数据项没有排过序.这个算法取出标记符所指的数据项,把它存储在一个临时的变量.接着,从刚刚被移除的数据项的左边第一个单元看是,每

Java数据结构和算法 - 高级排序

希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插入排序的执行效率. Q: 回忆之前的插入排序,有哪些缺点? A: 回忆之前的简单排序的“插入排序”一节,在插入排序执行一半的时候,标记位i左边这部分数据项都是排过序的,而标记位右边的数据项则没有排过序.这个算法取出标记位所指的数据项,把它存储在一个临时变量里,接着,从刚刚被移除的数据项的左边第一个元