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. codeforces 1029E Tree with Small Distances【思维+贪心】 【非原创】

    题目:戳这里 学习博客:戳这里 题意:给一个树加最少的边,使得1到所有点的距离小于等于2. 解题思路:分析样例3可以看出,如果一个点到1的距离大于2,那么建立1到该点的父亲节点的边将比直接与该点建边更 ...

  2. PAT L2-016. 愿天下有情人都是失散多年的兄妹 (BFS)

    L2-016. 愿天下有情人都是失散多年的兄妹 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 呵呵.大家都知道五服以内不得通婚 ...

  3. MOOC学习成果认证及对高等教育变革路径的影响

    MOOC是网络开放教育创新发展的产物,也是备受人们欢迎的网络学习途径.当前制约MOOC能否可持续深入发展的问题聚焦于MOOC学习成果能否得到合理的认证.MOOC学习成果认证分为非学分认证和学分认证.M ...

  4. Awesome GitHub Topics

    Awesome GitHub Topics freeCodeCamp https://github.com/topics/javascript?o=desc&s=stars https://g ...

  5. MBP 2018

    MBP 2018 touch pad MacBook Pro 如何调节键盘背光 https://support.apple.com/zh-cn/HT202310 F6 & F5 如何清洁 Ma ...

  6. js 裁剪图片

    js 裁剪图片 https://gugeji.com/search?q=js剪切图片

  7. map & scale bug

    map & scale TW bug https://antv.alipay.com/zh-cn/g2/3.x/demo/map/drill-down.html import React, { ...

  8. flutter sqlite持久化数据

    dependencies: path: sqflite: sqflite_common_ffi: import 'dart:io'; import 'package:flutter/material. ...

  9. Mybatis-06 动态Sql

    Mybatis-06 动态Sql 多对一处理 多个学生,对应一个老师 对于学生这边而言,关联多个学生,关联一个老师 [多对一] 对于老师而言,集合,一个老师又很多学生 [一对多] 1.创建数据库 2. ...

  10. Django Admin 后台Admin继承UserAdmin增加用户密码不显示明文和用户登录不了的解决方法

    Django后台Admin继承UserAdmin增加用户不显示明文方法 1.在 models.py 中用户表 # 导包规范-1.Python标准模块 from django.db import mod ...