排序算法总结

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. spring-基于xml的aop开发-快速入门

    1.导入aop的相关坐标 <dependency> <groupId>org.springframework</groupId> <artifactId> ...

  2. 安装mysql ndb cluster二进制版本在linux上

    Installing an NDB Cluster Binary Release on Linux (官方安装手册)手册地址:https://dev.mysql.com/doc/refman/5.7/ ...

  3. mysql server_id的用途(主从等结构中)

    前言 我们都知道MySQL用server-id来唯一的标识某个数据库实例,并在链式或双主复制结构中用它来避免sql语句的无限循环.5.7需要同时设置server_id参数,8.0开始server_id ...

  4. Codeforces Round #721 (Div. 2)A. And Then There Were K(位运算,二进制) B1. Palindrome Game (easy version)(博弈论)

    半个月没看cf 手生了很多(手动大哭) Problem - A - Codeforces 题意 给定数字n, 求出最大数字k, 使得  n & (n−1) & (n−2) & ...

  5. 1903021116-吉琛-Java第四周作业-程序编写

    项目 内容 课程班级博客链接 19级信计班 这个作业要求链接 Java分支语句学习 https://edu.cnblogs.com/campus/pexy/19xj/homework/12563 我的 ...

  6. 技术分享 | SeleniumIDE用例录制

    1.录制回放方式的稳定性和可靠性有限 2.只支持 Firefox.Chrome 3.对于复杂的页面逻辑其处理能力有限 环境准备 Chrome 插件:https://chrome.google.com/ ...

  7. zookeeper篇-zoo.cfg配置

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. zoo.cfg即/usr/local/java/zookeeper/co ...

  8. 看看JDK1.7与1.8的内存模型差异

    JDK1.7与1.8的区别的内存模型差异? jsk1.7的内存模型: 堆分为初生代和老年代,大小比例为1:2,初生代又分为eden.from.to三个区域,大小比例为8:1:1 方法区:有代码区.常量 ...

  9. 攻防世界-MISC:SimpleRAR

    这是攻防世界新手练习区的第十题,题目如下: 点击下载附件1,是一个RAR文件,解压一下,得到flag.txt文件,激动的点进去看一下 好吧,就知道没有这么简单,用010editor打开这个RAR文件, ...

  10. [AcWing 777] 字符串乘方

    点击查看代码 #include<iostream> using namespace std; string str; int main() { while (cin >> st ...