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. Http和Https之为什么Https更安全

    [除夕了,加油干.希望自己新的一年万事顺意,祝大家身体健康,心想事成!] 我们都知道 HTTPS 安全,可是为什么安全呢? 看小电影还是浏览正常网站,一定要检查是不是 HTTPS 的,因为Https相 ...

  2. C语言中函数的调用方式

    第一眼看到这样一个题目的我,心想除了如下的直接调用还能怎么调用呢? 1 void fun(void) 2 { 3 ...... 4 //你的代码 5 ..... 6 } 7 int main(void ...

  3. Smashing Conf 2020

    Smashing Conf 2020 https://smashingconf.com/online-workshops/ events https://smashingconf.com/ny-202 ...

  4. shit instagram

    shit instagram 无法登录 我们检测到了可疑登录操作 为保护帐户安全,请获取登录帮助. email 无法验证 x*****s@e*****.com xgqfrms@example.com ...

  5. 开源OA办公平台功能介绍:应用市场-固定资产管理(一)功能设计

    概述 应用市场-固定资产管理,是用来维护管理企业固定资产的一个功能.其整个功能包括对固定资产的台账信息.领用.调拨.借用.维修.盘点.报废等一整个生命周期的动态管理过程.力求客户安装就可以使用. 本应 ...

  6. Java 12 新特性介绍,快来补一补

    Java 12 早在 2019 年 3 月 19 日发布,它不是一个长久支持(LTS)版本.在这之前我们已经介绍过其他版本的新特性,如果需要可以点击下面的链接进行阅读. Java 11 新特性介绍 J ...

  7. linux系统忘记root的登录密码

    参考链接:https://www.jb51.net/article/146541.htm  亲测有效 使用场景 linux管理员忘记root密码,需要进行找回操作. 注意事项:本文基于centos7环 ...

  8. 【Notes】现代图形学入门_01

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...

  9. vue子组件的样式没有加scoped属性会影响父组件的样式

    scoped是一个vue的指令,用来控制组件的样式生效区域,加上scoped,样式只在当前组件内生效,不加scoped,这个节点下的样式会全局生效. 需要注意的是:一个组件的样式肯定是用来美化自己组件 ...

  10. 阿里云DataWorks实践:数据集成+数据开发

    简介 什么是DataWorks: DataWorks(数据工场,原大数据开发套件)是阿里云重要的PaaS(Platform-as-a-Service)平台产品,为您提供数据集成.数据开发.数据地图.数 ...