JavaSort

Java经典排序算法代码

2018-1-26更新:冒泡排序,选择排序,插入排序,快速排序

1. 冒泡排序
  • 特点:效率低,实现简单
  • 思想(从小到大排): 第1个数和第2个数比较,如果第1个数比第2个数小,则不动,如果第1个比第2个大,则交换。再比较第2个和第3个,如果第2个数比3个数小,则不动,如果第2个比第3个大,则交换。以此类推往后进行比较。一趟结束后,最大的数应该在最后一个(也可从后往前排)
public static void bubbleSort(int arr[]) {
    for(int i=0;i<arr.length-1;i++) {
        for(int j=0;j<arr.length-1-i;j++) {
            if(arr[j]>arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}
2. 选择排序
  • 特点:效率低,容易实现。
  • 第一趟->第一个数和后面的数依次比较,大就换,小就不动,第一趟结束,第一个数为最小的数。第二趟->第二个数和后面的数依次比较,大就换,小就不动,第二趟结束,第二个数为第二小的数。
  • 参考文章:https://www.cnblogs.com/shen-hua/p/5424059.html
public static void selectSort(int arr[]) {
    for(int i=0;i<arr.length-1;i++) {
        for(int j=i+1;j<arr.length;j++) {
            if(arr[i]>arr[j]) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
}
3. 插入排序
  • 特点:效率低,容易实现。
  • 分而治之的思想。就是把一串数字分成有序和无序的两部分。比如 8 3 2 5,首先把8看成有序(他就一个数,当然有序),然后 3 2 5就是无序的部分,再把3 2 5 中的 3 拿出来作为有序的部分 和 之前排好的有序部分 8 进行比较,发现 3 比 8 小,交换 现在排好的有序部分为 3 8,剩下的无序部分为 2 5 ,在剩下无序部分中把 2 看成有序,和排好的 3 8 依次比较,发现比3 小 ,交换 ,现在左边排好的是 2 3 8 ,还剩一个5.继续依次和排好的比较,2 比 5小,不交换,3 比 5 小不交换, 8 比5 大,交换,所以新的数组 2 3 5 8。
  • 参考文章:https://www.cnblogs.com/loveyoume/p/6261941.html
public static void insertSort(int arr[]) {
    for(int i=1;i<arr.length;i++) {
        for(int j=i-1;j>=0;j--) {
            if(arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}
4. 快速排序
  • 特点:高效,时间复杂度为nlogn。
  • 思想:设置2个指针low指向第一个数,指针high指向最后一个数,high从后往前找,和low的数比较,如果high的数比low的数小,交换.此时high不动,low从前往后找,找到一个数比high大,交换,直到low,high指向同一个数,结束第一次排序。
  • 参考文章:http://blog.csdn.net/as02446418/article/details/47395867
public static void quickSort(int arr[],int low,int high) {

    int start = low;
    int end = high;
    int key = arr[low];
    if(end<start) {
        return;
    }
    while(end>start) {
        //从后往前比
        while(end > start && arr[end] >= key) {//如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
            end--;
            if(arr[end]<=key) {
                int temp = arr[end];
                arr[end] = arr[start];
                arr[start] = temp;
            }
        }
        //从前往后比
        while(end > start && arr[start]<=key) {//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
            start++;
            if(arr[start]>=key) {
                int temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;
            }
        }
        //此时第一次循环比较结束,关键值的位置已经确定了。
        //左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
    }
    //递归
    if(start>low) quickSort(arr,low,start-1);//左边序列。第一个索引位置到关键值索引-1
    if(end<high) quickSort(arr,end+1,high);  //右边序列。从关键值索引+1到最后一个
}

详细代码可以去我的Github:https://github.com/weiliangchun/JavaSort

Java初级开发技术交流群:619201650。欢迎加入进行技术交流,禁止闲聊、斗图。

Java排序算法之冒泡、选择、插入、快速的更多相关文章

  1. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  2. python 中的一些基础算法:递归/冒泡/选择/插入

    递归算法 如果一个函数包含了对自己的调用,那么这个函数就是递归的. 比如我们计算下1-7乘法的计算: def func(n): if n ==1 : return 1 return n*func(n- ...

  3. 44.python排序算法(冒泡+选择)

    一,冒泡排序: 是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个,如果他们的排序错误就把他们交换过来. 冒泡排序是稳定的(所谓稳定性就是两个相同的元素不会交换位置) 冒泡排序算法的运作如下 ...

  4. 常用Java排序算法

    常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...

  5. python 数据结构与算法之排序(冒泡,选择,插入)

    目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...

  6. C++学习(三十八)(C语言部分)之 排序(冒泡 选择 插入 快排)

    算法是解决一类问题的方法排序算法 根据元素大小关系排序 从小到大 从大到小冒泡 选择 插入 快排希尔排序 归并排序 堆排序 冒泡排序 从头到尾比较 每一轮将最大的数沉底 或者最小数字上浮 选择排序 1 ...

  7. javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较

    javascript数据结构与算法--基本排序算法(冒泡.选择.排序)及效率比较 一.数组测试平台. javascript数据结构与算法--基本排序(封装基本数组的操作),封装常规数组操作的函数,比如 ...

  8. Java常见排序算法之直接选择排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  9. java排序算法(二):直接选择排序

    java排序算法(二) 直接选择排序 直接选择排序排序的基本操作就是每一趟从待排序的数据元素中选出最小的(或最大的)一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,它需要经过n- ...

随机推荐

  1. E20170623-hm

    verbose  adj. 冗长的,啰唆的,累赘的; reverse   vt. (使) 反转; (使) 颠倒; 掉换,交换; [法] 撤消,推翻;                adj. 反面的; ...

  2. Akka源码分析-Actor创建

    上一篇博客我们介绍了ActorSystem的创建过程,下面我们就研究一下actor的创建过程. val system = ActorSystem("firstActorSystem" ...

  3. Java统计一个字符串中各个字符出现的次数

    相信很多人在工作的时候都会遇到这样一个,如何统计一个字符串中各个字符出现的次数呢,这种需求一把用在数据分析方面,比如根据特定的条件去查找某个字符出现的次数.那么如何实现呢,其实也很简单,下面我贴上代码 ...

  4. Set-----集合入门

    函数中的集合和  数学中的集合 基本上差不多 集合中每个元素最多只能出现一次  并且 当元素储存到set集合之中 会自动 按照 ascll 进行  从小到大的  排序 大神关于   set   的 详 ...

  5. win快速搜索软件

    Everything 与其他搜索工具的简单比较: Everything 是至今为止 X-Force 所使用过速度最快的文件搜索工具.与它相似的有异次元曾经介绍过一款很老的软件AVAFind,也非常的优 ...

  6. 关于 android屏幕适配

    一.关于布局适配 1.不要使用绝对布局 2.尽量使用match_parent 而不是fill_parent . 3.能够使用权重的地方尽量使用权重(android:layout_weight) 4.如 ...

  7. mysql子查询与连接查询

    表结构以及数据: CREATE TABLE `student` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) CHARACTER SET utf8 COLLAT ...

  8. 【转】Java 集合系列09之 Map架构

    概要 前面,我们已经系统的对List进行了学习.接下来,我们先学习Map,然后再学习Set:因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过 ...

  9. SSH Secure Shell Client连接centos6.5时中文字乱码处理

    在学习Linux的过程中,最先碰到的是通过SSH终端连接时发现有乱码出现,使用这篇文章先从这里说起. 在 ssh , telnet 终端中文显示乱码解决办法#vim /etc/sysconfig/i1 ...

  10. 【转载】HTTP 请求头与请求体

    原文地址: https://segmentfault.com/a/1190000006689767 HTTP Request HTTP 的请求报文分为三个部分 请求行.请求头和请求体,格式如图:一个典 ...