8个排序算法——java
- public static void radixsort(int[] a){
- int max=a[0];
- for(int i=1;i<a.length;i++){
- if (max<a[i]) {
- max=a[i];
- }
- }
- int time=0;
- while(max>0){
- max/=10;
- time++;
- }
- java.util.List<ArrayList> queue=new ArrayList<ArrayList>();
- for(int i=0;i<10;i++){
- ArrayList<Integer> queue1=new ArrayList<>();
- queue.add(queue1);
- }
- for(int i=0;i<time;i++){
- for(int j=0;j<a.length;j++){
- int x=a[j]%(int)Math.pow(10, i+1)/(int)Math.pow(10, i);
- queue.get(x).add(a[j]);
- }
- int tmp=0;
- for(int j=0;j<10;j++){
- while(!queue.get(j).isEmpty()){
- a[tmp++]=(int)queue.get(j).remove(0);
- }
- }
- }
- for (int i = 0; i < a.length; i++) {
- System.out.println("radixsort" + a[i]);
- }
- }
- public static void mergesort(int[] a) {
- sort(a, 0, a.length-1);
- for (int i = 0; i < a.length; i++) {
- System.out.println("mergesort" + a[i]);
- }
- }
- public static void merging(int[] a, int left, int middle, int right) {
- if (middle < left || middle > right) {
- return;
- }
- int[] tmpArray = new int[a.length];
- int tmp = left;
- int tmpIndex = left;
- int begin1 = left;
- int begin2 = middle+1;
- while (begin1 <= middle && begin2 <= right) {
- if (a[begin1] < a[begin2]) {
- tmpArray[tmp++] = a[begin1++];
- } else {
- tmpArray[tmp++] = a[begin2++];
- }
- }
- while (begin1 <= middle) {
- tmpArray[tmp++] = a[begin1++];
- }
- while (begin2 <= right) {
- tmpArray[tmp++] = a[begin2++];
- }
- while(tmpIndex<=right){
- a[tmpIndex]=tmpArray[tmpIndex++];
- }
- }
- public static void sort(int[] a, int left, int right) {
- if (left < right) {
- int middle = (right - left) / 2 + left;
- sort(a, left, middle);
- sort(a, middle + 1, right);
- merging(a, left, middle, right);
- }
- }
- public static void quicksort(int[] a) {
- System.out.println("quicksort");
- quick(a, 0, a.length - 1);
- for (int i = 0; i < a.length; i++) {
- System.out.println("quicksort" + a[i]);
- }
- }
- public static void quick(int[] a, int left, int right) {
- if (left < right) {
- int middle = getMiddle(a, left, right);
- quick(a, left, middle);
- quick(a, middle + 1, right);
- }
- }
- public static int getMiddle(int[] a, int left, int right) {
- int tmp = a[left];
- while (left < right) {
- while (a[right] >= tmp && right > left) {
- right--;
- }
- a[left] = a[right];
- while (a[left] <= tmp && left < right) {
- left++;
- }
- a[right] = a[left];
- }
- a[left] = tmp;
- return left;
- }
- public static void bubblesort(int[] a) {
- for (int i = 0; i < a.length; i++) {
- for (int j = 0; j < a.length - i - 1; j++) {
- if (a[j] > a[j + 1]) {
- swap(a, j, j + 1);
- }
- }
- }
- for (int i = 0; i < a.length; i++) {
- System.out.println("bubblesort" + a[i]);
- }
- }
- public static void heapsort(int[] a) {
- for (int i = a.length - 1; i >= 0; i--) {
- buildmaxheap(a, i);
- swap(a, i, 0);
- }
- for (int i = 0; i < a.length; i++) {
- System.out.println("heapsort" + a[i]);
- }
- }
- public static void swap(int[] a, int i, int j) {
- int temp = a[i];
- a[i] = a[j];
- a[j] = temp;
- }
- public static void buildmaxheap(int[] a, int lastindex) {
- int length = a.length;
- if (lastindex >= length) {
- return;
- }
- int index = (lastindex - 1) / 2;
- for (; index >= 0; index--) {
- int left = index * 2 + 1;
- if (left <= lastindex) {
- if (a[index] < a[left]) {
- swap(a, index, left);
- }
- }
- if (left < lastindex && a[index] < a[left + 1]) {
- swap(a, index, left + 1);
- }
- }
- }
- public static void selectsort(int[] a) {
- int pos = 0;
- for (int i = 0; i < a.length; i++) {
- pos = i;
- for (int j = i + 1; j < a.length; j++) {
- if (a[pos] > a[j]) {
- pos = j;
- }
- }
- if (pos != i) {
- int temp = a[i];
- a[i] = a[pos];
- a[pos] = temp;
- }
- }
- for (int i = 0; i < a.length; i++) {
- System.out.println("shellsort" + a[i]);
- }
- }
- public static void shellsort(int[] a) {
- int length = a.length;
- System.out.println(length);
- for (int d = (int) Math.ceil(length / 2); d > 0; d /= 2) {
- for (int i = 0; i < d; i++) {
- System.out.println("i=" + i + " d=" + d);
- for (int j = i + d; j < length; j += d) {
- int temp = a[j];
- int k = j - d;
- System.out.println("j=" + j + " temp=" + temp + " k=" + k);
- for (; k >= 0 && temp < a[k]; k -= d) {
- System.out.println("k+d=" + (k + d) + " k=" + k + " a[k+d]=" + a[k + d] + " a[k]=" + a[k]);
- a[k + d] = a[k];
- }
- System.out.println("end" + "k+d=" + (k + d) + " a[k+d]=" + a[k + d] + " temp=" + temp);
- a[k + d] = temp;
- }
- }
- }
- for (int i = 0; i < a.length; i++) {
- System.out.println("shellsort" + a[i]);
- }
- }
- public static void selectSort(int[] a) {
- int length = a.length;
- int position = 0;
- for (int i = 0; i < length - 1; i++) {
- int temp = a[i];
- int j = i + 1;
- position = i;
- for (; j < length; j++) {
- if (a[j] < temp) {
- temp = a[j];
- position = j;
- }
- }
- a[position] = a[i];
- a[i] = temp;
- }
- for (int i = 0; i < a.length; i++) {
- System.out.println("selectSort" + a[i]);
- }
- }
- public static void insertSort(int[] a) {
- int temp = 0;
- for (int i = 1; i < a.length; i++) {
- int j = i - 1;
- temp = a[j + 1];
- for (; j >= 0 && a[j] > temp; j--) {
- System.out.println(j);
- a[j + 1] = a[j];
- }
- System.out.println(j);
- a[j + 1] = temp;
- }
- for (int i = 0; i < a.length; i++) {
- System.out.println(a[i]);
- }
- }
- }
8个排序算法——java的更多相关文章
- 八大排序算法Java
目录(?)[-] 概述 插入排序直接插入排序Straight Insertion Sort 插入排序希尔排序Shells Sort 选择排序简单选择排序Simple Selection Sort 选择 ...
- 八大排序算法Java实现
本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...
- 排序算法(Java实现)
这几天一直在看严蔚敏老师的那本<数据结构>那本书.之前第一次学懵懵逼逼,当再次看的时候,发觉写的是非常详细,非常的好. 那就把相关的排序算法用我熟悉的Java语言记录下来了.以下排序算法是 ...
- 6种基础排序算法java源码+图文解析[面试宝典]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结6大基础算法.java版强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步:1.思想2.图 ...
- 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题
常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...
- 九大排序算法Java实现
之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂 ...
- 排序系列 之 希尔排序算法 —— Java实现
基本思想: 希尔排序的实质就是分组插入排序,又称缩小增量法. 将整个无序序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本 ...
- 十大基础排序算法[java源码+动静双图解析+性能分析]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...
- 排序算法Java代码实现(一)—— 选择排序
以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦! 本片分为两部分代码: 常用方法封装 排序算法里需要频繁使 ...
- 【排序算法】希尔排序算法 Java实现
希尔排序算法是按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布,是插入排序的一种更高效的改进版本. 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎 ...
随机推荐
- Unity3D中使用委托和事件
前言: 本来早就想写写和代码设计相关的东西了,以前做2DX的时候就有过写写观察者设计模式的想法,但是实践不多.现在转到U3D的怀抱中,倒是接触了不少委托事件的写法,那干脆就在此总结一下吧. 1.C#中 ...
- Python 正则表达式入门(初级篇)
Python 正则表达式入门(初级篇) 本文主要为没有使用正则表达式经验的新手入门所写. 转载请写明出处 引子 首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达 ...
- Linux网络相关配置
一.修改网卡相关配置 Linux网络参数是在/etc/sysconfig/network-scripts/ifcfg-eth0中设置,其中ifcfg-eth0表示是第一个网卡,如果还有另外一块网卡,则 ...
- Kafka消费组(consumer group)
一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少.最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时 ...
- 关系数据库SQL之可编程性触发器
前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数.存储过程.事务.触发器及游标,前文已介绍了函数.存储过程.事务,本文来介绍一下触发器的使用.(还是以 ...
- python爬虫的一些心得
爬虫用于从网上得到目标数据,根据需要对其予以利用,加以分析,得到想要的实验成果.现在讲一讲我这两天学到的东西. 第一,爬虫的算法结构,包括以下几个方面: (1)读取网络数据 (2)将获取的数据解析为目 ...
- 【python常用函数1】
## 1 ##获取输入值 a = raw_input("请输入:") if a == str(1): print "success" else: print & ...
- Web项目从Oracle转为Mysql,fluentnhibernate-1.0和NHibernate2.1.0升级到NHibernate3.3的注意事项
1.Oracel数据库没有字段自增长属性,要实现自增长通常是通过查询序列或者触发器来实现的. 设置自增长主键 alter table SUB_SUBSCRIPTION add primary key( ...
- quartz CronExpression表达式
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素.按顺序依次为1.秒(0~59)2.分钟(0~59)3.小时(0~23)4.天(月)(0~31,但是你需要考虑你月的天数)5.月(0~11 ...
- Java NIO概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然 Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Se ...