《Algorithms》Comparable 实现排序大全
各种排序
这篇文章是将所有排序写到了一起。。方便复习。
各个排序的单独介绍戳下面:
- 选择排序
- 插入排序
- 冒泡排序
- 希尔排序
- 归并排序
- 快速排序
- 慢慢补全。。。
- 各排序算法时间比较(代码)
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 实现排序大全相关推荐
- Java核心技术之Comparator和Comparable在排序中的应用
自定义的类User: package com.example.testcomparator;public class User{private String name;private int age; ...
- java comparable排序_java 实现Comparable接口排序,升序、降序、倒叙
本人由于项目开发中需要对查询结果list进行排序,这里根据的是每一个对象中的创建时间降序排序.本人讲解不深,只实现目的,如需理解原理还需查阅更深的资料. 1.实现的效果 2.创建排序的对象 packa ...
- Collections接口下的Comparetor类和Comparable接口排序
继承Comparable接口,重写compareTo方法进行排序: public class Student implements Comparable<Student>{ pri ...
- Java如何实现Comparable 接口排序
有时候我们会对集合中的对象进行排序,而且这个排序是根据自身系统的业务来排序的.这个时候需要自己重写排序的具体业务.在java中 我们可以实现Comparator接口,重写该接口的comapre方法即可 ...
- Java - 排序大全
本帖子包含的排序有: 1.库函数的qsort()排序 2.冒泡排序 3.直接插入排序 4.折半插入排序 5.2-路·插入排序 6.希尔排序 7.快速排序 8.选择排序 9.堆排序 10.归并排序 11 ...
- C++中函数的重载和函数指针排序大全
函数重载的判断标准, 参数个数不相同 参数的类型不相同 参数的顺序不相同 注意函数的返回值不是函数重载的判断标准 函数变量得到声明 #include <iostream>using nam ...
- android comparator,Comparator和Comparable实现排序的例子源码及其对比
[Java] 纯文本查看 复制代码package object_sort; import java.text.ParseException; import java.text.SimpleDateFo ...
- 《Algorithms》常见排序算法比较
各类排序算法比较 package com.yusael.sortTest;import com.yusael.fundamental.Stopwatch;import java.util.Random ...
- sort 排序大全 - 最全的sort排序
文章目录 偷懒的tie 结构体内部 外部 精简 偷懒的tie #include <iostream> #include <tuple> #include <algorit ...
最新文章
- 025批量删除mac文件名中的空格
- 触控(Touch) 、 布局(Layout)
- 织梦DEDE后台定时分时段自动更新发布文章插件
- Auto-Scaling Web Applications in Clouds: A Taxonomy and Survey读书笔记
- Python中的多进程创建和传值(克隆)Queue方法
- 【Day 1】机器阅读理解——机器阅读理解简介
- vivo android 6.0 root,vivo手机怎么获取root权限?vivo手机一键ROOT教程
- FFmpeg转码B帧
- NVIDIA显卡刷BIOS教程,秒变超频显卡,将显卡性能发挥到极致!
- 笔记本计算机风扇连线,机箱风扇接口怎么接电源线【图文】
- win10 软路由_千元完美的家用低功耗软路由:J4125 迷你电脑GK41开箱体验!又是播放器,也是服务型AIO!...
- steam反作弊服务器未响应,受反作弊影响 Steam Deck暂无法运行部分主流游戏
- 一种高带外抑制Ku波段滤波器设计
- Tomcat日志切割工具 logrotate
- ⭐李宏毅2020作业2---logistic regression
- 搞定iOS的几种页面跳转方式
- HI3516DV300 图像输入
- web前端工具(配色图片图标)
- 关于Map入参,出参
- havc是什么意思_hvac是什么意思