一:冒泡法排序 

//冒泡排序 注:从小到大排
   //特点:效率低,实现简单
  //思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。

这只是冒泡排序的一种,当然也可以从后往前排。

算法步骤

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

  • 针对所有的元素重复以上的步骤,除了最后一个。

  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

动画演示

参考代码

public static void bubbleSort(int array[]) {
    int t = 0;
    for (int i = 0; i < array.length - 1; i++)
       for (int j = 0; j < array.length - 1 - i; j++)
        if (array[j] > array[j + 1]) {
        t = array[j];
        array[j] = array[j + 1];
       array[j + 1] = t;
       }
    }

二:选择排序

    //选择排序 从小到大

//特点:效率低,容易实现。
    //思想:每一趟从待排序序列选择一个最小的元素放到已排好序序列的末尾,剩下的为待排序序列,重复上述步骤直到完成排序。

算法步骤

  • 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

  • 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

  • 重复第二步,直到所有元素均排序完毕。

动画演示

参考代码

public static void selectSort(int array[]) {
     int t = 0;
     for (int i = 0; i < array.length - 1; i++){
       int index=i;
        for (int j = i + 1; j < array.length; j++)
           if (array[index] > array[j])
            index=j;
           if(index!=i){ //找到了比array[i]小的则与array[i]交换位置
             t = array[i];
             array[i] = array[index];
             array[index] = t;
             }
          }
       }

三:插入排序
     //插入排序 从小到大
     //特点:效率低,容易实现。
     //思想:将数组分为两部分,将后部分元素逐一与前部分元素比较,如果前部分元素比array[i]小,就将前部分元素往后移动。当没有比array[i]小的元素,即是                    合理位置,在此位置插入array[i]

算法步骤

  • 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

  • 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

动画演示

参考代码

public static void insertionSort(int array[]) {
         int i, j, t = 0;
          for (i = 1; i < array.length; i++) {
             if(array[i]<array[i-1]){
              t = array[i];
             for (j = i - 1; j >= 0 && t < array[j]; j--)
             array[j + 1] = array[j];
             //插入array[i]
            array[j + 1] = t;
               }
            }
        }

四:快速排序
    //快速排序 从小到大
    //特点:高效,时间复杂度为nlogn。
    //采用分治法的思想:首先设置一个轴值pivot,然后以这个轴值为划分基准将待排序序列分成比pivot大和比pivot小的两部分,

接下来对划分完的子序列进行快排直到子序列为一个元素为止。

算法步骤

  • 从数列中挑出一个元素,称为 “基准”(pivot);

  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

  • 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

动画演示

参考代码

public static void quickSort(int array[], int low, int high) {// 传入low=0,high=array.length-1;
      int pivot, p_pos, i, t;// pivot->位索引;p_pos->轴值。
       if (low < high) {
             p_pos = low;
             pivot = array[p_pos];
             for (i = low + 1; i <= high; i++)
                 if (array[i] < pivot) {
                      p_pos++;
                     t = array[p_pos];
                     array[p_pos] = array[i];
                     array[i] = t;
                }
              t = array[low];
              array[low] = array[p_pos];
              array[p_pos] = t;
              // 分而治之
             quickSort(array, low, p_pos - 1);// 排序左半部分
             quickSort(array, p_pos + 1, high);// 排序右半部分
            }
        }

 五:测试

package com.svse.paixu;
import java.util.Arrays;
public class JavaSort {

//打印方法

public static void print(int[] arr) {

  System.out.print("[");
  for (int i = 0; i < arr.length; i++) {
     if(i == arr.length-1) {
        System.out.println(arr[i] + "]");
      }else {
        System.out.print(arr[i] + ",");
      }
    }
  }

public static void main(String[] args) {
    int[] array = { 37, 47, 23, 100, 19, 56, 56, 99, 9 };

print(array);//排序前
    //JavaSort.bubbleSort(array);//冒泡排序
    //JavaSort.selectSort(array);//选择排序
    //JavaSort.insertionSort(array);//插入排序
    JavaSort.quickSort(array, 0, array.length-1);//快速排序
    System.out.println("排序后:" + Arrays.toString(array));

print(array);//排序后
    }
}

   六:各种排序算法性能比较

Java中选择排序,冒泡排序,插入排序,快速排序的更多相关文章

  1. 2017.12.9 Java中的排序---冒泡排序、快速排序、选择排序

    //冒泡排序 public class demo{ public static void main(String[] args) { int[] sum={2,9,10,1,5,88}; System ...

  2. [Java]数组排序-选择排序 冒泡排序 插入排序

    1 选择排序  原理:a 将数组中的每个元素,与第一个元素比较          如果这个元素小于第一个元素, 就将这个         两个元素交换.       b 每轮使用a的规则, 可以选择出 ...

  3. JAVA实现选择排序,插入排序,冒泡排序,以及两个有序数组的合并

    一直到大四才开始写自己的第一篇博客,说来实在有点羞愧.今天写了关于排序的算法题,有插入排序,冒泡排序,选择排序,以下贴上用JAVA实现的代码: public class test5 { public ...

  4. Java ——数组 选择排序 冒泡排序

    本节重点思维导图 数组 public static void main(String[] args) { int a ; a=3; int[] b; b = new int[3];//强制开辟内存空间 ...

  5. Linux C++ 直接选择排序,冒泡排序,快速排序

    选择排序的思想是:每次从待排序中选择最小(大)的元素插入已经排好的序列中. /*直接选择排序*/ #include <iostream> using namespace std; void ...

  6. [模板]选择排序&&冒泡排序&&插入排序

    #include<iostream> #include<cstdio> #include<bits/stdc++.h> using namespace std; v ...

  7. Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析

    前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...

  8. Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)

    一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...

  9. 【排序算法】——冒泡排序、选择排序、插入排序、Shell排序等排序原理及Java实现

    排序 1.定义: 所谓排序,即是整理文件中的内容,使其按照关键字递增或递减的顺序进行排列. 输入:n个记录,n1,n2--,其对应1的关键字为k1,k2-- 输出:n(i1),n(i2)--,使得k( ...

随机推荐

  1. lightswitch binding custom control

    Listing 1: Setting up data binding for the Rating control usingSystem.Windows.Controls;usingSystem.W ...

  2. vue中关于dom的操作

    mounted 个人理解为DOM结构准备就绪了,可以开始加载vue数据了, 挂载点,配合使用 mounted:function(){ this.$nextTick(function(){ //this ...

  3. Spark RDD转换为DataFrame

    #构造case class,利用反射机制隐式转换 scala> import spark.implicits._ scala> val rdd= sc.textFile("inp ...

  4. RockChip RK3326 系统编译问题总结

    1. 序言 本文主要记录了RK3326平台系统编译过程中遇到的各种问题,并加以解决! 环境: 宿主Linux:Ubuntu 16.04 目标机:RK3326 (64bit) Toolchain:gcc ...

  5. angular 禁止缓存

    angular 单页面开发,会存在和管理很多HTML和JS文件,缓存有时是个麻烦. 在开发和测试阶段,F12调出调试工具,禁止缓存F5刷新下就好了. 但是在客户那里缓存就体验效果不好,甚至认为有问题, ...

  6. Java框架之Spring(三)

    本文主要介绍Spring中, 1 Bean 的 init-method 和 destroy-method 2 集合类型的装配 3 注解方式装配 4 以自动扫描把组件纳入spring容器中管理 5 代理 ...

  7. python基础之数据的三大结构

    python的三大数据结构 1.顺序 2.分支 3.循环 # if语句联系# 如果age小于18岁,则打印信息“未成年”age = 17if age <= 18: print("未成年 ...

  8. 微信小程序踩过的一些坑

    前言 迄今为止,正儿八经的上线了真正意义上的程序,但是这个小程序却着实不小. 之所以不小,是因为这个类似于社区的小程序,已经做了大部分都有的功能了 举例说明,具体的一些功能点: 1.帖子列表页面:会有 ...

  9. Vagrant安装配置

    转载自:https://my.oschina.net/u/3424381/blog/888205 Vagrant安装配置 实际上Vagrant只是一个让你可以方便设置你想要的虚拟机的便携式工具,它底层 ...

  10. GIS性能策略

    当一个地理平台上线运行,我们经常会遇到这些问题:1.系统刚上线时速度较快,一段时间后访问较慢?2.在地理平台目前的配置下,发布多少个服务才合理?一个服务配置多少个实例数才合适?这些问题,都涉及整个地理 ...