一:冒泡法排序 

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

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

算法步骤

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

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

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

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

动画演示

参考代码

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. 2017年最新20个轻量的 JavaScript 库和插件

    下面这个列表中的免费 JavaScript 插件都是今年发布的,没有臃肿的一体化的框架,它们提供轻量级的解决方案,帮助 Web 开发过程更容易和更快.提供的插件可以创建滑块.响应式菜单.模态窗口.相册 ...

  2. 软工网络16个人作业2——WordCount

    Deadline: 2018-9-17 22:00PM,以博客提交至班级博客时间为准 要求参考来自:https://www.cnblogs.com/xinz/archive/2011/11/27/22 ...

  3. Yapi学习笔记

    . 下载源码:https://github.com/YMFE/yapi 2. 安装MongoDB数据库,下载地址:链接:https://pan.baidu.com/s/1bZKlcy 密码:ah3n ...

  4. PHP7.27: MySqlhelper class

    https://github.com/ThingEngineer/PHP-MySQLi-Database-Class https://github.com/wildantea/php-pdo-mysq ...

  5. BZOJ2564: 集合的面积(闵可夫斯基和 凸包)

    题意 题目链接 Sol 这个东西的学名应该叫"闵可夫斯基和".就是合并两个凸包 首先我们先分别求出给出的两个多边形的凸包.合并的时候直接拿个双指针扫一下,每次选最凸的点就行了. 复 ...

  6. 转载--tomcat调优

    转载  https://www.cnblogs.com/wangsen/p/9337969.html

  7. Chrome调试本地文件无法使用window.opener对象进行窗口间值传递

    今天在百度BAE上建了个应用,svn上传后发现页面间互调有些问题,几经查询发现: (1)IE下正常的window.opener.object1.object2页面间对象访问方法在Chrome下不能使用 ...

  8. 《Inside C#》笔记(完) 程序集

    程序集内部包含了各种相关的模块.资源文件.配置文件等,将这些在功能上相关的文件整合到单个文件中,以便于部署和维护.使用C#编译器编译程序时,生成的便是程序集. 一.清单数据 a)如果编译的是独立应用程 ...

  9. Android中使用progurad混淆代码

    第一步,取消project.properties中关于progurad的注释,开启progurad,默认的配置文件会被加载进来. proguard.config=${sdk.dir}/tools/pr ...

  10. Android--判断listview上下滑动的方法

    elv_music_res_fragment.setOnScrollListener(new AbsListView.OnScrollListener() { private int mLastFir ...