八大排序算法 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.基数排序 上述所有的 ...
随机推荐
- 微信公众平台开发(1) 通用的工具类CommonUtil
1.通用的调用微信的方法 /** * * @param requestUrl 接口地址 * @param requestMethod 请求方法:POST.GET... * @param output ...
- 解决无法定位程序输入点SymEnumSymbols于动态链接库dbghelp.dll
作者:朱金灿 来源:http://blog.csdn.net/clever101 下载一个源码,使用VS2008编译链接无问题,运行时出现一个错误:无法定位程序输入点SymEnumSymbols于动态 ...
- Delphi MD5加密
Delphi MD5加密 1. 引用两个单元 uses IdHash,IdHashMessageDigest; 2.编写加密函数 function TEncrypti ...
- (让你提前知道软件开发33):数据操纵语言(DML)
文章2部分 数据库SQL语言 数据操纵语言(DML) 数据操纵语言(Data Manipulation Language,DML)包含insert.delete和update语句,用于增.删.改数据. ...
- REST = HTTP动词(GET POST PUT DELETE)操作 + 服务器暴露资源URI,最后返回状态码(充分利用HTTP自身的特征,而不仅仅是把HTTP当作传输协议。Rest协议是面向资源的,SOAP是面向服务的),表现形式可以是JSON XML BIN,举例很清楚
好处是,操作系统或者浏览器,可以重复利用它们内置的缓存机制等等. 增删改查都是一个地址,具体靠http头部信息判断. 利用HTTP协议语义构建的语义化.可缓存的接口. URL定位资源,用HTTP动词( ...
- IOC学习1
学习蒋金楠的 ASP.NET Core中的依赖注入(1):控制反转(IoC) 而来,这篇文章经典异常.一定要多读.反复读. 这篇文章举了一个例子,就是所谓的mvc框架,一开始介绍mvc的思想,由一个d ...
- 简明Python3教程 9.函数
简介 函数是程序的可复用片段,允许你为语句块赋予名字之后在程序的任何地方运行它们任意次,这称做函数调用. 我们已经使用过一些内建函数,例如len和range等. 函数也许是任何有意义的软件中最重要的构 ...
- 创建一个显示所有预定义WPF颜色的ListBox
原文 Creating a ListBox that Shows All Predefined WPF Colors 在WPF中,您可以使用Colors类访问一系列预定义颜色,这些颜色定义为Color ...
- [ACM] POJ 3096 Surprising Strings (map使用)
Surprising Strings Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5783 Accepted: 379 ...
- 从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller
原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...