今天很高兴 终于系统的实现了八大排序算法!不说了 直接上代码 !代码都是自己敲的, 亲测可用没有问题!

另:说一下什么是八大排序算法:

插入排序

希尔排序

选择排序

堆排序

冒泡排序

快速排序

归并排序

基数排序

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实现 亲自测试 可用!的更多相关文章

  1. 八大排序算法Java实现

    本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...

  2. 八大排序算法Java

    目录(?)[-] 概述 插入排序直接插入排序Straight Insertion Sort 插入排序希尔排序Shells Sort 选择排序简单选择排序Simple Selection Sort 选择 ...

  3. 八大排序算法java代码

    1.冒泡排序 public static void main(String[] args) { int[] arr = {1,4,2,9,5,7,6}; System.out.println(&quo ...

  4. 八大排序算法总结与java实现(转)

    八大排序算法总结与Java实现 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 ...

  5. 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)

    一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...

  6. Java八大排序算法

    Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...

  7. [Data Structure & Algorithm] 八大排序算法

    排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...

  8. Python实现八大排序算法(转载)+ 桶排序(原创)

    插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想 ...

  9. Python - 八大排序算法

    1.序言 本文使用Python实现了一些常用的排序方法.文章结构如下: 1.直接插入排序 2.希尔排序 3.冒泡排序 4.快速排序 5.简单选择排序 6.堆排序 7.归并排序 8.基数排序 上述所有的 ...

随机推荐

  1. JavaCPP 技术使用经验总结

    本文是对 JNI 技术的一个补充方法,提出了替换 JNI.JNA 的一种开源技术.首先对 JavaCPP 技术进行简单介绍及对应于其他现有方案的介绍.对比.接下来,通过一个简单的示例让大家了解 Jav ...

  2. HDU 2842 Chinese Rings(矩阵高速功率+递归)

    职务地址:HDU 2842 这个游戏是一个九连环的游戏. 如果当前要卸下前n个环.由于要满足前n-2个都卸下,所以要先把前n-2个卸下.须要f(n-2)次.然后把第n个卸下须要1次,然后这时候要卸下第 ...

  3. Matlab Tricks(二十八)—— 笛卡尔积的实现

    笛卡尔积在数学上是一种二元关系,笛卡尔积作用的双方是两个集合,作用的结果是一个新的集合. A×B={(a,b)|a∈Aandb∈B} 现有两向量: >> p = [1, 5, 10]; & ...

  4. 如何停止处于stopping状态的windows服务(使用taskkill)

    工作中有时需要启动和停止windows service,有时候会出现服务处于stopping或者starting的状态,但是,在services界面中,start service/stop servi ...

  5. 安德鲁斯Launcher得到的装在手机的应用程序列表

    Launcher最基本的是让所有的应用程序和入口图标的列表.有两种方法来获得,一般: PackageInfo ResolveInfo 执行获取全部APP的Launcher而且同意进行点击事件,进入到应 ...

  6. Mybatis缓存 缓存配置文件 good

    一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...

  7. C#: Get current keyboard layout\input language

    原文 https://yal.cc/csharp-get-current-keyboard-layout/ On some occasions, you may want to get a " ...

  8. js 超链接点击

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  9. 【C#】解决MouseHook捕获鼠标动作,在有些电脑上SetWindowsHookEx失败返回0的问题

    原文:[C#]解决MouseHook捕获鼠标动作,在有些电脑上SetWindowsHookEx失败返回0的问题 最近在debug鼠标位置捕获的功能时发现在其中的一台开发电脑上,SetWindowsHo ...

  10. 初探WINDOWS下IME编程

    初探WINDOWS下IME编程作者:广东南海市昭信科技有限公司-李建国 大家知道,DELPHI许多控件有IME属性.这么好用的东西VC可没自带,怎么办呢?其实,可通过注册表,用API实现.下面说一下本 ...