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年公布,是插入排序的一种更高效的改进版本. 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎 ...
随机推荐
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...
- jQuery源码学习感想
还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...
- ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图
原文:Controller methods and views 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘) .张仁建(第二年.夏) .许登洋(Seay) .姚阿勇 ...
- Rafy 框架 - 流水号插件
Rafy 框架又添新成员:流水号插件.本文将解释 Rafy 框架中的流水插件的场景.使用方法. 场景 在开发各类数据库应用系统时,往往需要生成从一开始的流水号,有时还需要按月或者按日进行独立生成,如下 ...
- BaaS API 设计规范
上个月写了一个团队中的 BaaS API 的设计规范,给大家分享下: 目录 1. 引言... 4 1.1. 概要... 4 1.2. 参考资料... 4 1.3. 阅读对象... 4 1.4. 术语解 ...
- 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法
1,到官网下载最新的boost,www.boost.org 这里我下载的1-63版本. 2,安装,解压后运行bootstrap.bat文件.稍等一小会就OK. 3,编译boost库.注意一定要使用VS ...
- 使用Eclipse创建Maven Web工程
方法/步骤 1 使用Eclipse创建Maven Web工程 2 找到Maven Project,点击Next 3 勾选上Create a simple project (不使用骨架),Next 4 ...
- POI读取EXCEL(2007以上)
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; im ...
- Golang接口(interface)三个特性(译文)
The Laws of Reflection 原文地址 第一次翻译文章,请各路人士多多指教! 类型和接口 因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍. go是一个静态性语言,每个变量都 ...
- MS SQL按IN()内容排序
需求:MMSQL查询结果,按查询条件中关键字IN内的列举信息的顺序一一对应排序. 分析:使用CHARINDEX 函数. 解决方法: SELECT * FROM Product WHERE 1=1 AN ...