排序算法总结

1.十大经典算法及性能

2.具体排序算法

1.冒泡排序

  • 循环过程中比较相邻两个数大小,通过交换正确排位,循环整个数组即可完成排序

  • 图片演示

  • 代码实现Java

    //冒泡排序
    public static Integer[] Bubble(Integer[] array){
    boolean ranked = false;
    for (int i = 0; i < array.length; i++) {
    for(int j=0;j<array.length-i-1;j++){
    if(array[j]>array[j+1]){
    int c = array[j];
    array[j] = array[j+1];
    array[j+1] = c;
    ranked = true;
    }
    }
    if(!ranked){
    break;
    }
    }
    return array;
    }

2.选择排序

  • 选择最大的排到最右边或选择最小的排到最左边

  • 图片演示

  • 代码实现(Java)

    public static int[] SelectSort( int[] array){
    for (int i = 0; i < array.length; i++) {
    int min = i;
    for(int j = i+1; j < array.length; j++){
    if(array[j]<min){
    min = j;
    }
    }
    int c = array[i];
    array[i] = array[min];
    array[min] = c;
    }
    return array;
    }

3.插入排序

  • 把左边当做已完成序列,右边作为未完成排序,遍历右边插入到左边已完成序列中

  • 图片演示

  • 代码实现

    public  static int[] insertionSort(int[] array){
    for(int i = 1; i < array.length; i++){
    int complete = i-1;
    int current = array[i];
    while(complete >=0 && array[complete]>current){
    array[complete+1] = array[complete];
    complete--;
    }
    array[complete+1] = current;
    }
    return array;
    }

4.希尔排序

  • 希尔排序是插入排序的改进算法,但它是不稳定算法。先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。参考:https://www.cnblogs.com/chengxiao/p/6104371.html

  • 图片演示

  • 代码实现

//希尔排序
public static int[] shellSort(int[] array){
int current;
for(int step=array.length/2;step>=1;step/=2){
for(int i = step;i<array.length;i++){
current = array[i];
int j = i-step;
while(j>=0&&array[j]>=current){
array[j+step] = array[j];
j -= step;
}
array[j+step] = current;
}
}
return array;
}

5.归并排序

  • 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

  • 两种实现方式

    • 自上而下的递归
    • 自下而上的迭代
  • 图片演示

  • 代码实现(java)

    public int[] sort(int[] sourceArray) throws Exception {
    // 对 arr 进行拷贝,不改变参数内容
    int[] arr = Arrays.copyOf(sourceArray, sourceArray.length); if (arr.length < 2) {
    return arr;
    }
    int middle = (int) Math.floor(arr.length / 2); int[] left = Arrays.copyOfRange(arr, 0, middle);
    int[] right = Arrays.copyOfRange(arr, middle, arr.length); return merge(sort(left), sort(right));
    } protected int[] merge(int[] left, int[] right) {
    int[] result = new int[left.length + right.length];
    int i = 0;
    while (left.length > 0 && right.length > 0) {
    if (left[0] <= right[0]) {
    result[i++] = left[0];
    left = Arrays.copyOfRange(left, 1, left.length);
    } else {
    result[i++] = right[0];
    right = Arrays.copyOfRange(right, 1, right.length);
    }
    } while (left.length > 0) {
    result[i++] = left[0];
    left = Arrays.copyOfRange(left, 1, left.length);
    } while (right.length > 0) {
    result[i++] = right[0];
    right = Arrays.copyOfRange(right, 1, right.length);
    } return result;
    }

常用排序算法(一)-java实现的更多相关文章

  1. 常用排序算法及Java实现

    概述 在计算器科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定排序方式进行排列的一种算法.本文将总结几类常用的排序算法,包括冒泡排序.选择排序.插入排序 ...

  2. 常用排序算法的Java实现 - 1

    学习编程语言时, 我们会接触到许多排序算法, 这里总结了一下常见的排序算法. 不定期更新. * 其实在Java中存在如Collections.sort()这样的方法来自动为我们排序, 不过学习排序算法 ...

  3. 常用排序算法的Java实现与分析

    由于需要分析算法的最好时间复杂度和最坏时间复杂度,因此这篇文章中写的排序都是从小到大的升序排序. 带排序的数组为arr,arr的长度为N.时间复杂度使用TC表示,额外空间复杂度使用SC表示. 好多代码 ...

  4. 数据结构与算法——常用排序算法及其Java实现

    冒泡排序 原理:依次比较相邻的两个数,将小数放在前面(左边),大数放在后面(右边),就像冒泡一样具体操作:第一趟,首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前 ...

  5. 插入排序,选择排序,冒泡排序等常用排序算法(java实现)

    package org.webdriver.autotest.Study; import java.util.*; public class sort_examp{ public static voi ...

  6. 几大排序算法的Java实现

    很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...

  7. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  8. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  9. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

  10. Java常用排序算法及性能测试集合

    测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...

随机推荐

  1. 第一阶段:Java基础之OOP

    OOP:面向对象编程 三大特征: 封装 继承 多态

  2. Java基础之浅谈泛型

    简单的介绍了Java泛型类型的使用.上手容易,深入很难.

  3. sqlplus文件查看自带oracle命令的执行过程

    问题描述:看到一篇文章 在$ORACLE_HOME/bin/sqlplus中可以查看到数据库命令的查询语句.可以直接编辑sqlplus文件,查到到我们平时标准系统命令的原脚本,但是自己进行编辑查看却是 ...

  4. 函数 装饰器 python

    今日内容概要 1.闭包函数 2.闭包函数的实际应用 3.装饰器简介(重点加难点) 4.简易版本装饰器 5.进阶版本装饰器 6.完整版本装饰器 7.装饰器模板(拷贝使用即可) 8.装饰器语法糖 9.装饰 ...

  5. 21天学通Python PDF完整版

    有需要的点击这里自取 内容简介  · · · · · · <21天学通Python>全面.系统.深入地讲解了Python编程基础语法与高级应用.在讲解过程中,通过大量实际操作的实例将Pyt ...

  6. SQL语言详解

    SQL 1. 概述 Structured Query Language 结构化查询语言 结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言, ...

  7. CentOS8更换yum源后出现同步仓库缓存失败的问题

    1.错误情况更新yum时报错: 按照网上教程,更换阿里源.清华源都还是无法使用.可参考: centos8更换国内源(阿里源)_大山的博客-CSDN博客_centos8更换阿里源icon-default ...

  8. 从零开始,开发一个 Web Office 套件(16):拖动控制点,调整编辑器大小

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  9. 绕过 Docker ,大规模杀死容器

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 作者 | Connor Brewster 译者 | Sambodhi 策划 | Tina 要让 ...

  10. 4 个超实用的 Linux 监控工具

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 下面是 Linux 下 4 个日常使用率非常高的监控工具,可以帮助我们准确快速的诊断系统问题. 1. iotop 如果你想知 ...