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年公布,是插入排序的一种更高效的改进版本. 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎 ...
随机推荐
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理
篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblog ...
- Java 素数 prime numbers-LeetCode 204
Description: Count the number of prime numbers less than a non-negative number, n click to show more ...
- 一个可随意定位置的带色Toast——开源代码Crouton的简单使用
今天在公司要求的代码中,要求显示的提示能够更加具有多样化,而不是简单的Toast字样,第一想法肯定是自定义View呀,结果在浏览中发现还有这样的一个开源代码——Crouton. 几经折腾,发现这个东西 ...
- Linux 解决数量庞大wildfly容器启动与停止的脚本
一.问题 因公司业务的发展,后台架构的变更,导致测试环境(Linux)部署与管理困难成倍增长,duang的一下,增加N倍.进入正题说问题: 问题1. 测试环境包含普通用户环境.开发者用户环境,原来只 ...
- MSSQL练习题
下列属于SQL Server的系统数据库是( ) A.modelB.publicC.NorthwindD.System 答案:http://hovertree.com/tiku/bjaf/06nvv7 ...
- C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)
我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...
- python学习笔记1:python入门
关于版本的选择 按照网上的说法,如果python是为了在工作中使用,选择2.7版本的.这里我选择2.7.9版本的来进行学习: Python是什么? 是一种高级的计算机程序设计语言.应用范围比较广,go ...
- 微信小程序demo理解
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Verdana } p.p2 { margin: 0.0px 0.0px 0.0px 0.0p ...
- 数据结构:优先队列 基于堆实现(python版)
#!/usr/bin/env python # -*- coding:utf-8 -*- ''' Author: Minion-Xu ''' #异常类 class HeapPriQueueError( ...
- entityframework学习笔记--009-使用原生sql语句操作数据
1 使用原生SQL语句更新--Database.ExecuteSqlCommand 假设你有一张如图9-1所示的Payment数据库表. 图9-1 1.1 实体类型: public class Pay ...