八大排序算法 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.基数排序 上述所有的 ...
随机推荐
- Android开发入门——Andoird Studio的安装与配置
Android的开发离不开Java,仍然需要对Java进行安装与配置,所以我写了上一篇文章,Java的安装与配置. 开始进行Android Studio的安装与配置. 一.进行配置Java,如果电脑里 ...
- 在项目中使用CLR规划
1.创建自己的项目 2.对"解..."→参加→目→C#→数据库→SQL Server项目,例如以下图所看到的: 3.选择操作数据库 4.创建存储过程 5.代码(详见:CLR存储过程 ...
- Swift语言高速入门
Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
- npm与cnpm混用导致的问题
npm和cnpm混用之后,再用npm升级模块导致如下错误: 解决办法: 删除node_modules文件下的文件后,重新执行npm install
- UVALive 6531 Go up the ultras 单调栈+RMQ
题目链接:点击打开链接 题意: 给定n座山 以下n个数字表示n座山的高度 若这座山u合法,则要满足: 1.若u的左边存在比u高的山,设v是u左边距离u近期的且严格比u高的山,在[v,u]之间至少有一座 ...
- c语言学习笔记(7)——数组
一.为什么需要数组1.为了解决大量同类型的数据存储和使用2.为了模拟现实世界二.数组的分类1.一维数组为n个变量连续分配存储空间所有的变量数据类型必须相同所有变量所占的字节大小必须相等初始化:完全初始 ...
- 清晰明亮的白色lua协程(coroutine)
协同程序线程类和多线程下似:它有它自己的堆栈.自己的局部变量.它有自己的指令指针,但是,其他协程共享全局变量和其他项目信息.主要不同在于:多处理器的情况下.概念上来说多线程是同一时候执行多个线程,而协 ...
- 对XAML进行编辑的辅助类(XamlHelper)
原文:对XAML进行编辑的辅助类(XamlHelper) // XamlHelper.cs// --------------------------------------------// 对XAML ...
- 数据结构 - 只需选择排序(simple selection sort) 详细说明 和 代码(C++)
数据结构 - 只需选择排序(simple selection sort) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/28601 ...
- Python算法(含源代码下载)
关键字:Python Algorithms Python算法 Mastering Basic Algorithms in the Python Language 使用Python语言掌握基本算法 P ...