各种排序

这篇文章是将所有排序写到了一起。。方便复习。

各个排序的单独介绍戳下面:

  • 选择排序
  • 插入排序
  • 冒泡排序
  • 希尔排序
  • 归并排序
  • 快速排序
  • 慢慢补全。。。
  • 各排序算法时间比较(代码)
public class test {/*** 比较大小* */public static boolean less(Comparable m, Comparable n){return m.compareTo(n) < 0;}/*** 交换所有元素* */public static void exchange(Comparable[] a, int m, int n){Comparable temp = a[m];a[m] = a[n];a[n] = temp;}/*** 展示所有元素* */public static void show(Comparable[] a){for (int i = 0 ; i < a.length ; i++){System.out.print(a[i] + " ");}System.out.println();}/*** 判断是否成功排序* */public static boolean isSorted(Comparable[] a){for (int i = 1 ; i < a.length ; i++){if (less(a[i], a[i-1]))return false;}return true;}/*** 选择排序算法* */public static void SelectSort(Comparable[] a){for (int i = 0 ; i < a.length ; i++){int min = i;for (int j = i ; j < a.length ; j++){if (less(a[j] ,a[min]))min = j;}exchange(a, i, min);}}/*** 冒泡排序算法* */public static void BubbleSort(Comparable[] a){for (int i = 0 ; i < a.length ; i++){for (int j = 0 ; j < a.length-i-1 ; j++){if (less(a[j+1], a[j]))exchange(a, j, j+1);}}}/***  插入排序算法**/public static void InsertionSort(Comparable[] a){for (int i = 1 ; i < a.length ; i++){for (int j = i ; j>0 &&(less(a[j], a[j-1])) ; j--){exchange(a, j, j-1);}}}/*** 希尔排序* */public static void ShellSort(Comparable[] a){int len = a.length;int h = 1;while (h < len/3)h = 3*h + 1;while (h >= 1){for (int i = h ; i < a.length ; i++){for (int j = i ; j>=h&&(less(a[j], a[j-h])); j-=h){exchange(a, j, j-h);}}h = h/3;}}/*** 快速排序* *//*切分*/public static int partition(Comparable[] a, int lo, int hi){int i = lo;int j = hi + 1;Comparable v = a[lo];while (true){while (less(a[++i], v))if (i == hi)break;while (less(v, a[--j]))if (j == lo)break;if (i >= j)break;;exchange(a, i, j);}exchange(a, lo, j);return j;}public static void quick(Comparable[] a, int lo, int hi){if (hi <= lo)return;int j = partition(a, lo, hi);quick(a, lo, j-1);quick(a, j+1, hi);}public static void quickSort(Comparable[] a){quick(a, 0, a.length-1);}/*** 原地归并* */private static Comparable[] aux; // 辅助数组public static void merge(Comparable[] a, int lo, int mid, int hi){int i = lo;int j = mid + 1;for (int k = lo ; k <= hi ; k++){aux[k] = a[k];}for (int k = lo ; k <= hi ; k++){if (i > mid)a[k] = aux[j++];else if (j > hi)a[k] = aux[i++];else if (less(aux[i], aux[j]))a[k] = aux[i++];elsea[k] = aux[j++];}}/*** 自上而下的归并排序算法* */public static void mergeUpToDown(Comparable[] a, int lo, int hi){if (hi <= lo)return;int mid = (lo + hi) / 2;mergeUpToDown(a, lo, mid);mergeUpToDown(a, mid+1, hi);merge(a, lo, mid, hi);}public static void mergeUpToDownSort(Comparable[] a){aux = new Comparable[a.length];mergeUpToDown(a, 0, a.length - 1);}/*** 从下往上的归并排序算法* */public static void mergeDownToUpSort(Comparable[] a){// 进行 logN 次两两归并int len = a.length;aux = new Comparable[len]; // 辅助数组for (int sz = 1 ; sz < len ; sz = sz + sz){ // sz:子数组的大小,sz的初始值为1,每次加倍for (int lo = 0 ; lo < len - sz ; lo += sz + sz){ // lo:子数组索引,一开始每次加2,然后+4,+8...merge(a, lo, lo+sz-1, Math.min(lo+sz+sz-1, len-1));}}}/*** 测试案例* */public static void main(String[] args) {Comparable[] a = new Comparable[200];for (int i = 0 ; i < a.length ; i++){a[i] = new Random().nextInt(1000);}System.out.println("排序前:");show(a);System.out.println("排序后:");//SelectSort(a); // 选择排序//BubbleSort(a);  // 冒泡排序//InsertionSort(a); // 插入排序//ShellSort(a);  // 希尔排序//mergeUpToDownSort(a); // 自上而下的归并排序//mergeDownToUpSort(a); // 从下往上的归并排序//quickSort(a);  // 快速排序show(a);System.out.println("是否排序成功:" + isSorted(a));}}

《Algorithms》Comparable 实现排序大全相关推荐

  1. Java核心技术之Comparator和Comparable在排序中的应用

    自定义的类User: package com.example.testcomparator;public class User{private String name;private int age; ...

  2. java comparable排序_java 实现Comparable接口排序,升序、降序、倒叙

    本人由于项目开发中需要对查询结果list进行排序,这里根据的是每一个对象中的创建时间降序排序.本人讲解不深,只实现目的,如需理解原理还需查阅更深的资料. 1.实现的效果 2.创建排序的对象 packa ...

  3. Collections接口下的Comparetor类和Comparable接口排序

    继承Comparable接口,重写compareTo方法进行排序: public class Student implements Comparable<Student>{     pri ...

  4. Java如何实现Comparable 接口排序

    有时候我们会对集合中的对象进行排序,而且这个排序是根据自身系统的业务来排序的.这个时候需要自己重写排序的具体业务.在java中 我们可以实现Comparator接口,重写该接口的comapre方法即可 ...

  5. Java - 排序大全

    本帖子包含的排序有: 1.库函数的qsort()排序 2.冒泡排序 3.直接插入排序 4.折半插入排序 5.2-路·插入排序 6.希尔排序 7.快速排序 8.选择排序 9.堆排序 10.归并排序 11 ...

  6. C++中函数的重载和函数指针排序大全

    函数重载的判断标准, 参数个数不相同 参数的类型不相同 参数的顺序不相同 注意函数的返回值不是函数重载的判断标准 函数变量得到声明 #include <iostream>using nam ...

  7. android comparator,Comparator和Comparable实现排序的例子源码及其对比

    [Java] 纯文本查看 复制代码package object_sort; import java.text.ParseException; import java.text.SimpleDateFo ...

  8. 《Algorithms》常见排序算法比较

    各类排序算法比较 package com.yusael.sortTest;import com.yusael.fundamental.Stopwatch;import java.util.Random ...

  9. sort 排序大全 - 最全的sort排序

    文章目录 偷懒的tie 结构体内部 外部 精简 偷懒的tie #include <iostream> #include <tuple> #include <algorit ...

最新文章

  1. 025批量删除mac文件名中的空格
  2. 触控(Touch) 、 布局(Layout)
  3. 织梦DEDE后台定时分时段自动更新发布文章插件
  4. Auto-Scaling Web Applications in Clouds: A Taxonomy and Survey读书笔记
  5. Python中的多进程创建和传值(克隆)Queue方法
  6. 【Day 1】机器阅读理解——机器阅读理解简介
  7. vivo android 6.0 root,vivo手机怎么获取root权限?vivo手机一键ROOT教程
  8. FFmpeg转码B帧
  9. NVIDIA显卡刷BIOS教程,秒变超频显卡,将显卡性能发挥到极致!
  10. 笔记本计算机风扇连线,机箱风扇接口怎么接电源线【图文】
  11. win10 软路由_千元完美的家用低功耗软路由:J4125 迷你电脑GK41开箱体验!又是播放器,也是服务型AIO!...
  12. steam反作弊服务器未响应,受反作弊影响 Steam Deck暂无法运行部分主流游戏
  13. 一种高带外抑制Ku波段滤波器设计
  14. Tomcat日志切割工具 logrotate
  15. ⭐李宏毅2020作业2---logistic regression
  16. 搞定iOS的几种页面跳转方式
  17. HI3516DV300 图像输入
  18. web前端工具(配色图片图标)
  19. 关于Map入参,出参
  20. havc是什么意思_hvac是什么意思

热门文章

  1. 哪些手机支持双wifi?
  2. i5 9400f和GTX1660能玩战地5吗?
  3. QItemSelectionModel——视图选择
  4. IDEA配置使用阿里云maven仓库
  5. azure机器学习_Azure机器学习中的数据清理
  6. SQL Server执行计划面试问题
  7. 在SQL Server中批量复制,导入和导出的技术
  8. C语言中static的用法
  9. Django项目:CRM(客户关系管理系统)--83--73PerfectCRM实现CRM模板统一
  10. 1,二维数组中的查找《剑指offer》