`
xqg-88
  • 浏览: 11092 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 快速排序与冒泡排序

阅读更多
一、
  /*
   * 快速排序
   */
  public void _quickSort(int[] list, int low, int high) {
    if (low < high) {
      int middle = getMiddle(list, low, high);  //将数组进行一分为二
      _quickSort(list, low, middle - 1);        //对低位进行递归排序
      _quickSort(list, middle + 1, high);       //对高位进行递归排序
    }
  }

  public int getMiddle(int[] list, int low, int high) {
    int tmp = list[low];    //数组的第一个作为中轴
    while (low < high) {
      while (low < high && list[high] >= tmp) {
        high--;
      }
      list[low] = list[high]; //比中轴小的记录移到低端
      while (low < high && list[low] <= tmp) {
        low++;
      }
      list[high] = list[low]; //比中轴大的记录移到高端
    }
    list[low] = tmp; //中轴记录到尾
    return low;     //返回中轴的位置
  }


二、
  /*
   * 快速排序(改进版)
   */
  private void quickSort(int[] arr, int start, int end) {
    int base = arr[start];
    int i = start;
    int j = end + 1;
    // 如果end <= start,则结束递归
    if (start < end) {
      while (true) {
        // 当i指向的数字大于或等于基准数时,停止递增
        while (i < end) {
          if (base <= arr[++i]) //小于等于
            break;
        }
        // 当j指向的数字小于基准数时,停止递减
        while (start < j) {
          if (arr[--j] < base)
            break;
        }
        // 如果i<j,则将两个数字对换;否则跳出循环
        if (i < j) {
          int temp = arr[i];
          arr[i] = arr[j];
          arr[j] = temp;
        } else {
          break;
        }
      }
      // 将基准数与j指向的数字进行对换
      arr[start] = arr[j];
      arr[j] = base;
      // 对基准数两侧的区域分别进行递归
      quickSort(arr, start, j - 1);
      quickSort(arr, j + 1, end);
    }
  }


三、
  /*
   * 冒泡排序(改进版)
   */
  private void BubbleSort(int[] arr) {
    boolean flag;
    for (int i = 0; i < arr.length; i++) {
      flag = false;
      for (int j = 0; j < (arr.length - i - 1); j++) {
        if (arr[j] > arr[j + 1]) {
          int temp = arr[j + 1];
          arr[j + 1] = arr[j];
          arr[j] = temp;
          flag = true;
        }
      }
      // 如果没有发生交换,说明排序正确,退出循环
      if (!flag) {
        break;
      }
    }
  }
 
 
分享到:
评论

相关推荐

    java快速排序、冒泡排序、插入排序示例

    本篇文章将详细讲解快速排序、冒泡排序和插入排序这三种常用的排序算法,并通过Java代码示例进行演示。 **快速排序** 快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare于1960年提出。其基本思想是...

    java算法,快速排序、冒泡排序、选择排序

    java算法,快速排序、冒泡排序、选择排序 快速排序文章:http://blog.csdn.net/yanwenyuan0304/article/details/51822361 冒泡排序文章:http://blog.csdn.net/yanwenyuan0304/article/details/51819045

    JAVA冒泡排序和快速排序算法

    在JAVA中,实现这两种排序算法可以使用面向对象的特性,创建一个类如`MaopaoKuaisu.java`,在这个类中定义两个方法,分别实现冒泡排序和快速排序。类的结构可能如下: ```java public class MaopaoKuaisu { public...

    java 冒泡排序 数组冒泡排序

    下面我们将深入探讨冒泡排序的工作原理、Java代码实现以及其效率分析。 ### 冒泡排序的工作原理 冒泡排序的基本思想是,重复地走访过要排序的元素列表,依次比较相邻的两个元素,如果它们的顺序(如从小到大)错误...

    Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结.md

    Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结 Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结 Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结

    JAVA排序算法: 直接插入,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序

    本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...

    java冒泡排序java冒泡排序集锦方法!

    以上三个知识点总结了关于 Java 排序的一些基本应用,包括基础的冒泡排序算法、使用标准库 `Collections.sort()` 进行排序以及使用 `RuleBasedCollator` 实现国际化排序等。这些技术对于编写高效、可维护的 Java ...

    JAVA排序大全 冒泡 快速 选择 归并排序

    JAVA排序大全 冒泡 快速 选择 归并排序

    java版冒泡排序,插入排序,堆排序,快速排序,归并排序,希尔排序,桶排序

    堆排序和快速排序在中大规模数据上表现良好,但快速排序的不稳定性和堆排序的空间复杂度是需要注意的问题;归并排序和希尔排序在稳定性上有优势,而桶排序则对输入数据分布有特定要求。在实际应用中,根据数据特性...

    快速排序与冒泡排序,Java实现

    快速排序和冒泡排序是两种基础且常用的排序算法,在计算机科学和编程领域有着广泛的应用。本文将详细讨论这两种排序算法的原理以及它们在Java语言中的实现。 **快速排序(Quick Sort)** 快速排序是由C.A.R. Hoare...

    JAVA快速,选择,冒泡数组排序

    本主题将详细介绍三种基本的排序算法:快速排序、选择排序和冒泡排序,以及它们在Java中的实现。 1. **快速排序**: 快速排序是一种高效的分治算法,由C.A.R. Hoare在1960年提出。其主要思想是通过一趟排序将待排...

    JAVA实现选择,冒泡,归并,插入,快速排序

    JAVA实现选择,冒泡,归并,插入,快速排序。并随机生成不同规模的随机数来测试各种排序方法耗费的时间。

    3种排序方法的对比(快速排序,归并排序,冒泡排序)

    本文将深入探讨三种经典的排序算法:快速排序、归并排序和冒泡排序。这三种排序算法在不同的场景下有着各自的优势和适用性,而作为C++程序员,理解它们的工作原理及性能特点对于优化代码至关重要。 快速排序是一种...

    Java冒泡排序算法

    在Java中实现冒泡排序,我们可以从以下几个方面来深入理解: 1. **基本概念**:冒泡排序通过重复遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再...

    用java实现冒泡排序法

    下面我们将详细介绍如何用Java实现冒泡排序及其工作原理。 冒泡排序的工作原理: 冒泡排序的基本思想是重复地遍历待排序的序列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历序列的工作是重复地...

    排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht

    排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht

    JAVA冒泡排序及其优化

    冒泡排序与二分查找法的结合可能出现在这样的场景:当序列已排序时,我们可以使用二分查找法来快速定位特定元素。二分查找法的基本思想是将序列分为两半,每次都检查中间元素,根据目标值与中间值的比较结果,缩小...

    常用排序算法的java实现(冒泡、插入、选择、希尔、归并、快排)

    在Java中,冒泡排序的基本思路是使用两个for循环,外层循环控制比较的轮数,内层循环用于两两比较并交换。改进的冒泡排序通常包括设置标志位来检测是否已经完成排序,以及添加一个提前退出循环的条件,当某次遍历...

    java 冒泡排序法 PPT文档

    - 可能会对比冒泡排序与其他排序算法(如快速排序、归并排序等)的优劣。 - 也可能涉及冒泡排序的变种,如鸡尾酒排序(双向冒泡排序)等。 通过学习这个PPT,你将能够理解冒泡排序的基本思想,掌握其Java实现,...

Global site tag (gtag.js) - Google Analytics