八大排序算法 JAVA实现 亲自测试 可用!
今天很高兴 终于系统的实现了八大排序算法!不说了 直接上代码 !代码都是自己敲的, 亲测可用没有问题!
另:说一下什么是八大排序算法:
插入排序
希尔排序
选择排序
堆排序
冒泡排序
快速排序
归并排序
基数排序
public class SortHandler {
public static void main(String args[])
{
//int a[] = {13,12,5,71,2,54,9,6};
// straightInsertSort(a,8);
// print(a,8);
// shellSort(a, 8);
// print(a,8);
// simpleSelectSort(a,8);
// print(a,8);
// bubbleSort2(a, 8);
// print(a,8);
// quickSort(a,8);
// print(a,8);
// print(a,8);
// heapSort(a,8);
// print(a,8);
// print(a,8);
// mergeSort(a);
// print(a,8);
//
// int[] a = { 49, 38, 65, 197, 76, 213, 27, 50 };
// radixSort(a);
}
public static void print(int a[], int n){
for(int j= 0; j<n; j++){
System.out.print(a[j]);
System.out.print(" ");
}
System.out.println();
}
public static void straightInsertSort(int a[], int n)
{
if(n <= 1)
{
return;
}
for(int i = 1; i < n; i++)
{
int x = a[i];
int j = i -1;
while(j >= 0 && a[j] > x)
{
a[j+1] = a[j];
j--;
}
a[j+1] = x;
print(a,8);
}
}
public static void shellInsertSort(int a[], int n, int dk)
{
if(n <= 1 || dk > n)
{
return;
}
for(int i = dk * 2 -1; i < n; i++)
{
int x = a[i];
int j = i - dk;
while(j >= 0 && a[j] > x)
{
a[j+dk] = a[j];
j = j - dk;
}
a[j+dk] = x;
print(a,8);
}
}
public static void shellSort(int a[], int n)
{
int dk = n/2;
while(dk >= 1)
{
shellInsertSort(a, n, dk);
dk = dk/2;
}
}
public static void simpleSelectSort(int a[], int n)
{
int index = 0;
for(int i = 0; i < n-1; i++)
{
index = i;
for(int j = i; j < n-1; j++)
{
if(a[j+1] < a[index])
{
index = j+1;
}
}
if(index != i)
{
int temp = a[index];
a[index] = a[i];
a[i] = temp;
}
print(a,8);
}
}
public static void heapSort(int a[], int length)
{
buildHeap(a, length);
print(a,8);
for(int i = length -1; i > 0; i --)
{
swap(a, 0, i);
heapAjust(a, 0, i-1);
print(a,8);
}
}
public static void buildHeap(int a[], int length)
{
for(int i = length/2 -1; i >= 0; i --)
{
heapAjust(a, i, length);
}
}
public static void heapAjust(int a[], int s, int length)
{
if(s < 0)
{
return;
}
int child = 2 * s + 1;
while(child < length)
{
if(child + 1 < length && a[child] > a[child + 1])
{
child ++;
}
if(a[child] < a[s])
{
swap(a, child, s);
s = child;
child = 2*s + 1;
}
else
{
break;
}
}
}
public static void bubbleSort(int a[], int n)
{
for(int i = 0; i < n-1; i++)
{
for(int j = 0; j < n-i-1; j++)
{
if(a[j] > a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
print(a,8);
}
}
public static void bubbleSort2(int a[], int n)
{
int high, low, temp;
high = n -1;
low = 0;
while(low < high)
{
for(int j = low; j < high; j++)
{
if(a[j] > a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
for(int k = high; k > low; k--)
{
if(a[k] < a[k-1])
{
temp = a[k];
a[k] = a[k-1];
a[k-1] = temp;
}
}
low ++;
high --;
print(a, 8);
}
}
public static void swap(int a[], int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static int partition(int a[], int low, int high)
{
int pivotLoc = low;
while(low < high)
{
while(a[high] > a[pivotLoc] && low < high)
{
high --;
}
if(low < high)
{
swap(a, pivotLoc, high);
pivotLoc = high;
}
else
{
break;
}
while(a[low] < a[pivotLoc] && low < high)
{
low ++;
}
if(low < high)
{
swap(a, pivotLoc, low);
pivotLoc = low;
}
else
{
break;
}
}
print(a, 8);
return pivotLoc;
}
public static void quickSort(int a[], int low, int high)
{
if(low < high)
{
int pivotLoc = partition(a, low, high);
quickSort(a, low, pivotLoc - 1);
quickSort(a, pivotLoc + 1, high);
}
}
public static void quickSort(int a[], int length)
{
quickSort(a, 0, length-1);
}
public static void mergeSort(int a[])
{
int low = 0, high = a.length - 1;
mergeSort(a, low, high);
}
public static void mergeSort(int a[], int low, int high)
{
System.out.println("mergeSort-- " + "low: " + low + " high: " + high);
int mid = (low + high) / 2;
if(low < high)
{
mergeSort(a, low, mid);
mergeSort(a, mid + 1, high);
merge(a, low, mid, high);
}
print(a,8);
return;
}
private static void merge(int[] a, int low, int mid, int high)
{
if(low >= high)
{
return;
}
int[] temp = new int[high - low + 1];
int i=low, j=mid + 1, k=0;
for(; i <= mid && j <= high; k++)
{
if(a[i] < a[j])
{
temp[k] = a[i];
i++;
}
else
{
temp[k] = a[j];
j++;
}
}
if(i <= mid)
{
for(; i <= mid; i++,k++)
{
temp[k] = a[i];
}
}
else if(j <= high)
{
for(; j <= high; j++,k++)
{
temp[k] = a[j];
}
}
for(int m = 0; m < temp.length; m++)
{
a[m + low] = temp[m];
}
}
public static int getMaxDigits(int a[])
{
//first get the max one
int max = a[0];
for(int i = 1; i < a.length; i++)
{
if(max < a[i])
{
max = a[i];
}
}
if(max < 0)
{
return -1;
}
//then get the max digits
int digits = 0;
while(max > 0)
{
digits ++;
max /= 10;
}
return digits;
}
public static int getNumInPosition(int number, int digit)
{
for(int i = 0; i < digit; i ++)
{
number /= 10;
}
number %= 10;
return number;
}
public static void radixSort(int a[])
{
int length = a.length;
int digits = getMaxDigits(a);
int array[][] = new int[10][a.length + 1];
for(int i = 0; i < 10; i++)
{
//the first element stores the column count;
//instantiate
array[i][0] = 0;
}
print(a, 8);
for(int i = 0; i < digits; i++)
{
for(int j = 0; j < length; j++)
{
int row = getNumInPosition(a[j], i);
int col = ++array[row][0];
array[row][col] = a[j];
}
for(int row = 0, m = 0; row < 10; row++)
{
int cols = array[row][0];
for(int col = 1; col <= cols; col++)
{
a[m++] = array[row][col];
}
//reinitialize
array[row][0] = 0;
}
print(a, 8);
}
}
}
八大排序算法 JAVA实现 亲自测试 可用!的更多相关文章
- 八大排序算法Java实现
本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...
- 八大排序算法Java
目录(?)[-] 概述 插入排序直接插入排序Straight Insertion Sort 插入排序希尔排序Shells Sort 选择排序简单选择排序Simple Selection Sort 选择 ...
- 八大排序算法java代码
1.冒泡排序 public static void main(String[] args) { int[] arr = {1,4,2,9,5,7,6}; System.out.println(&quo ...
- 八大排序算法总结与java实现(转)
八大排序算法总结与Java实现 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 ...
- 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)
一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...
- Java八大排序算法
Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...
- [Data Structure & Algorithm] 八大排序算法
排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...
- Python实现八大排序算法(转载)+ 桶排序(原创)
插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想 ...
- Python - 八大排序算法
1.序言 本文使用Python实现了一些常用的排序方法.文章结构如下: 1.直接插入排序 2.希尔排序 3.冒泡排序 4.快速排序 5.简单选择排序 6.堆排序 7.归并排序 8.基数排序 上述所有的 ...
随机推荐
- 全文检索(elasticsearch入门)
Elasticsearch篇: Elasticsearch是一个采用java语言开发的,基于Lucene构造的开源,分布式的搜索引擎. 设计用于云计算中,能够达到实时搜索,稳定可靠. Elastics ...
- uva 11552 Fewest Flops 线性dp
// uva 11552 Fewest Flops // // 二维线性dp // // 首先,在该块必须是相同的来信.首先记录每块有很多种书 // 称为是counts[i]; // // 订购f[i ...
- JavaScript(js)获取本周,本月,本季,本年,上月,上周,上季,去年,上二周,上二月的时间段的代码
function dateChange(name){ var beginTimeObject = document.getElementById("beginTime"); var ...
- C++第11周(春)项目4 - 类族的设计
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4 - 类族的设计]按下面的提示,由基类 ...
- 数据科学(data science)概览
0. 硬件平台设计 一种分层的体系结构: 自下到上依次是: 硬件层 分布式系统层 分布式管理层 分布式处理层 应用层: 1. 总论
- 超平面(hyperplane)的定义
Hyperplane - Wikipedia Hyperplane – from Wolfram MathWorld a1,a2,-,an 为一组不全为 0 的纯量,如下定义的集合 S 由这样的向量构 ...
- 《菊与刀》original 的阅读
0. 词汇 foe:敌人,反对者,危害物: rigid:严格的,僵硬的,死板的, they are incomparably rigid in their behavior, innovation:革 ...
- WPF响应长按事件
原文:WPF响应长按事件 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/lwwl12/article/details/78983140 思路:MouseD ...
- cocos2d-x 在XML分析和数据存储
无意中起到一周中的游戏,哎,时间过得总是打得那么快时,. .. 于是今天决定看一下之前不怎么非常熟悉的XML;(之前做游戏时数据的储存用到过XML.但这块是还有一个同事在做,所以不怎么熟悉), 看了看 ...
- ajax默认form表单提交,导致实体不识别
出现位置:实体比较复杂,包含List之类的时候 public class AdvertisementType { /// <summary> /// 广告位名称 /// </summ ...