package sort;

public class Sort {
public static void BubbleSort(int[] arr) {
//TODO 冒泡排序
for(int i=arr.length-1;i>0;i--) {
for(int j=0;j<i;j++) {
if(arr[j]<arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
public static void InsertSort(int[] arr) {
//TODO 插入排序
for(int i=1;i<arr.length;i++) {
int temp = arr[i];
int index = i-1;
while(index>=0 && arr[index]>temp) {
arr[index+1] = arr[index];
index--;
}
arr[index+1] = temp;
}
}
public static void ShellSort(int[] arr) {
//TODO 希尔排序
for(int r = arr.length/2;r>=1;r=r/2) {
for(int i=r;i<arr.length;i++) {
int j=i-r;
int temp = arr[i];
while(j>=0 && arr[j]>temp) {
arr[j+r] = arr[j];
j-=r;
}
arr[j+r] = temp;
}
}
}
public static void Heapsort(int[] arr) {
//TODO 堆排序
for(int i=arr.length/2-1;i>=0;i--) {
Perdown(arr,i,arr.length);
}
for(int j=arr.length-1;j>=0;j--) {
int temp = arr[j];
arr[j] = arr[0];
arr[0] = temp;
Perdown(arr,0,j);
}
}
public static void Perdown(int[] arr,int i,int length) {
int child = 0;
int j;
int temp = arr[i];
for(j=i;j*2+2<=length-1;j=child) {
child = j*2+1;
if(child!=length-1 && arr[child]<arr[child+1]) {
child++;
}
if(arr[child]>temp) {
arr[j] = arr[child];
}else {
break;
}
}
arr[j] = temp;
}
public static void MergeSort(int[] arr){
//TODO 归并排序
int[]tmp = new int[arr.length];
MSort(arr,tmp,0,arr.length-1);
}
public static void MSort(int[]arr,int[]tmp,int left,int right){
int center;
if (left<right){
center = (right+left)/2;
MSort(arr,tmp,left,center);
MSort(arr,tmp,center+1,right);
merge(arr,tmp,left,center+1,right);
}
}
public static void merge(int[]arr,int[]tmp,int left,int center,int right){
int start = left;
int leftEnd = center-1;
int length = right-left+1;
while (left<=leftEnd && center<=right){
if (arr[left]<arr[center]){
tmp[start++] = arr[left++];
}else {
tmp[start++] = arr[center++];
}
}
while (left<=leftEnd){
tmp[start++] = arr[left++];
}
while (center<=right){
tmp[start++] = arr[center++];
}
for (int i=0;i<length;i++,right--){
arr[right] = tmp[right];
}
}
public static void QuickSort(int[] arr){
//TODO 快速排序
QSort(arr,0,arr.length-1);
}
public static void QSort(int[] arr,int low,int high){
if (low>high){
return;
}
int i =low;
int j = high;
int tmp = arr[low];
while (i<j){
//先看右面
while (arr[j]>=tmp && i<j){
j--;
}
//再看左面
while (arr[i]<=tmp && i<j){
i++;
}
//交换
if (i<j){
int a = arr[i];
arr[i] = arr[j];
arr[j] = a;
}
}
arr[low] = arr[i];
arr[i] = tmp;
QSort(arr,low,i-1);
QSort(arr,i+1,high);
}
public static void main(String[] args) {
int[] test = {2,5,1,0,6,7,3};
QuickSort(test);
for(int i=0;i<test.length;i++) {
System.out.print(test[i]);
}
}
}

java实现所有排序算法的更多相关文章

  1. Java中的排序算法(2)

    Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...

  2. java实现各种排序算法

    java实现各种排序算法 import java.util.Arrays; public class SomeSort { public static void main(String[] args) ...

  3. Java实现常见排序算法

    常见的排序算法有冒泡排序.选择排序.插入排序.堆排序.归并排序.快速排序.希尔排序.基数排序.计数排序,下面通过Java实现这些排序 1.冒泡排序 package com.buaa; import j ...

  4. Java数组的排序算法

    在Java中,实现数组的排序算法有很多,如冒泡排序法.选择排序法.直接插入法和快速排序法等.下面介绍几种排序算法的具体 实现. 本文引用文献:Java必须知道的300个问题. 1.冒泡排序法 1.1 ...

  5. java实现八大排序算法

    Arrays.sort() 采用了2种排序算法 -- 基本类型数据使用快速排序法,对象数组使用归并排序. java的Collections.sort算法调用的是归并排序,它是稳定排序 方法一:直接插入 ...

  6. java实现折半排序算法

    折半插入排序法,又称二分插入排序法,是直接插入排序法的改良版,也需要执行i-1趟插入,不同之处在于,第i趟插入,先找出第i+1个元素应该插入的的位置,假定前i个数据是已经处于有序状态. 折半插入排序( ...

  7. JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  8. Java版各种排序算法 (冒泡,快速,选择,插入)

    package com.test4; import java.util.*; //Calendar 显示时间 /** * @author qingfeng * 功能:排序算法 */ public cl ...

  9. Java学习笔记——排序算法之快速排序

    会当凌绝顶,一览众山小. --望岳 如果说有哪个排序算法不能不会,那就是快速排序(Quick Sort)了 快速排序简单而高效,是最适合学习的进阶排序算法. 直接上代码: public class Q ...

  10. Java学习笔记——排序算法之希尔排序(Shell Sort)

    落日楼头,断鸿声里,江南游子.把吴钩看了,栏杆拍遍,无人会,登临意. --水龙吟·登建康赏心亭 希尔算法是希尔(D.L.Shell)于1959年提出的一种排序算法.是第一个时间复杂度突破O(n²)的算 ...

随机推荐

  1. Qt开发Activex笔记(一):环境搭建、基础开发流程和演示Demo

    前言   使用C#开发动画,绘图性能跟不上,更换方案使用Qt开发Qt的控件制作成OCX以供C#调用,而activex则是ocx的更高级形式.  QtCreator是没有Active控件项目的,所有需要 ...

  2. Redis 哨兵高可用(Sentinel)

    哨兵机制是 Redis 高可用中重要的一环,其核心是 通过高可用哨兵集群,监控主从复制的健康状态,并实现自动灾备: 哨兵集群以集群的方式进行部署,这种分布式特性具有以下优点: 避免系统中存在单点,防止 ...

  3. webpack4.0源码解析之打包后js文件分析

    首先,init之后创建一个简单的webpack基本的配置,在src目录下创建两个js文件(一个主入口文件和一个非主入口文件)和一个html文件,package.json,webpack.config. ...

  4. how to remove duplicates of an array by using js reduce function

    how to remove duplicates of an array by using js reduce function ??? arr = ["a", ["b& ...

  5. cookie & maxAge & expires

    cookie & maxAge & expires Expires (timestamp) & Max-Age (seconds) https://developer.mozi ...

  6. CSS margin collapsing All In One

    CSS margin collapsing All In One margin collapsing margin 塌陷 / margin 合并 会出现 margin collapsing 的 3 种 ...

  7. Koa & node.js

    KOA https://github.com/koajs/koa https://koajs.com/ $ nvm install 7 # node.js 7 + $ nvm install 10 $ ...

  8. macOS & timer & stop watch

    macOS & timer & stop watch https://matthewpalmer.net/blog/2018/09/28/top-free-countdown-time ...

  9. ES6 Arrow Function return Object

    ES6 Arrow Function return Object https://github.com/lydiahallie/javascript-questions/issues/220#issu ...

  10. Flutter 模拟youtube快进icon

    import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends State ...