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年公布,是插入排序的一种更高效的改进版本. 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎 ...
随机推荐
- CGI与FastCGI
当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断发展,网站也越来越复杂, ...
- Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全 (转)
目前在 iOS 和 OS X 中有两套先进的同步 API 可供我们使用:NSOperation 和 GCD .其中 GCD 是基于 C 的底层的 API ,而 NSOperation 则是 GCD 实 ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- 灵活可扩展的工作流管理平台Airflow
1. 引言 Airflow是Airbnb开源的一个用Python写就的工作流管理平台(workflow management platform).在前一篇文章中,介绍了如何用Crontab管理数据流, ...
- C# 条件编译
本文导读: C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define.#undef.#if,#elif,#else和#endif等等,下面介绍 ...
- Button 模板和样式
<Style TargetType="{x:Type Button}"> <Setter Property="FontFamily" Valu ...
- [moka同学笔记]PHPexcel之excel导出和导入
原案例来自http://www.sucaihuo.com/有修改 1.目录结构(文件不用解释,应该都可以看得懂,直接看代码)
- Android 手机卫士10--应用管理器
1.添加不同类型条目 class MyAdapter extends BaseAdapter{ //获取数据适配器中条目类型的总数,修改成两种(纯文本,图片+文字) @Override public ...
- 遍历map的四种方法
方法一 在for-each循环中使用entries来遍历这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用.注意:for-each循环在Java 5中被引入所以该方法只能应用于j ...
- JavaScript简单分页,兼容IE6,~3KB
简介 兼容IE6+及现代浏览器的简单分页,支持同一页面多个分页. 使用 Browser <link rel="stylesheet" href="css/GB-pa ...