`
isiqi
  • 浏览: 16599048 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

(十六)高级排序—快速排序

阅读更多

一、快速排序描述:

快速排序的基本思想是:将最右端的元素作为枢纽,然后将所有元素划分为两组,然后将最右端的枢纽元素与枢纽位置上的元素替换(枢纽位置即为prititioin方法返回的位置,这样做的目的是使枢纽元素以后不需要再排序);接下来,再将这两个组最右端的元素分别作为两组的枢纽继续划分,依次类推下去,直到只剩下最后一个元素。快速排序的起始图如下所示:

快速排序

二、快速排序Java语言描述:

package com.solid.sort;

public class QuickSort {

//定义数组

private int[] arr;

private static int nElems;

/**

* 构造方法

* @param maxSize

*/

public QuickSort(int maxSize) {

arr = new int[maxSize];

nElems = 0;

}

/**

* 插入元素到数组

* @param key

*/

public void insert(int key) {

arr[nElems++] = key;

}

/**

* 遍历数组元素

*/

public void display() {

for(int i=0; i<nElems; i++) {

System.out.print(arr[i] + " ");

}

System.out.println();

}

/**

* 调用快速排序方法

*/

public void sort() {

quickSort(0, nElems-1);

}

/**

* 快速排序

* @param left

* @param right

*/

public void quickSort(int left, int right) {

if(left >= right) {

return;

} else {

int pivot = arr[right];

int prititionIt = pritition(left, right, pivot);

quickSort(left, prititionIt-1);

quickSort(prititionIt+1, right);

}

}

/**

* 划分算法

* @return

*/

private int pritition(int left, int right, int pivot) {

int leftPtr = left - 1;

int rightPtr = right;

while(true) {

while(arr[++leftPtr] < pivot)

;

while(rightPtr > 0 && arr[--rightPtr] > pivot)

;

if(leftPtr >= rightPtr) {

break;

} else {

int temp = arr[leftPtr];

arr[leftPtr] = arr[rightPtr];

arr[rightPtr] = temp;

}

}

int temp = arr[leftPtr];

arr[leftPtr] = arr[right];

arr[right] = temp;

return leftPtr;

}

/**

* 测试main方法

* @param args

*/

public static void main(String[] args) {

QuickSort quickSort = new QuickSort(100);

for(int i=0; i<100; i++) {

int temp = (int)(Math.random()*100);

quickSort.insert(temp);

}

quickSort.display();

quickSort.sort();

quickSort.display();

}

}

分享到:
评论

相关推荐

    C++语言的算法实现包括插入排序冒泡排序堆排序快速排序

    本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...

    快速排序算法和冒泡排序效率对比

    快速排序和冒泡排序是两种常见的排序算法,它们在计算机科学中扮演着重要的角色,特别是在数据处理和优化程序性能方面。...同时,这也为我们提供了深入学习其他高级排序算法,如归并排序、堆排序等的基础。

    高级排序算法C++源码

    在IT领域,排序算法是计算机...通过阅读和理解`高级排序.cpp`文件,你可以了解到如何在C++中实现这些高级排序算法,并从中学习如何优化和比较排序算法的性能。这将对提升你的编程技能和理解复杂数据处理有极大的帮助。

    Jquery表格排序插件,支持快速排序

    - `method`:排序算法的选择,可选`'simply'`(简单排序)或`'advance'`(高级排序,默认为快速排序)。 - `type`:数据类型,用于确定排序规则,可选`'number'`(数字排序)或`'string'`(字符串排序)。 - `attr`...

    C#中 8种初级+高级排序方法

    这里我们将探讨8种在C#中实现的初级和高级排序方法,这些方法在数据结构和算法的学习中至关重要。以下是每种排序方法的详细介绍: 1. **冒泡排序 (Bubble Sort)** 冒泡排序是最简单的排序算法之一,它通过重复遍历...

    高级算法设计实验4:快速排序

    2、熟练使用高级编程语言实现不同的快速排序算法。 3、利用实验测试给出不同快速排序算法的性能以理解其优缺点。 快速排序是算法导论中的经典算法。在本实验中,给定一个长为 n 的整数数 组,要求将数组升序排序。

    普林斯顿快速排序PPT

    ### 普林斯顿快速排序PPT核心知识点解析 #### 快速排序算法详解 ...通过以上介绍,我们不仅了解了快速排序的基本流程,还掌握了其实现方法及应用场景,这对于进一步学习其他高级排序算法也有很好的铺垫作用。

    TIA博途中通过SCL语言实现快速排序的具体方法示例.docx

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它基于分治法的策略,通过选取一个基准值并重新排列数组,将问题分解为较小的部分,然后递归地对这些部分进行排序,最终达到整个序列...

    winform 快速排序算法源码

    快速排序是一种高效的排序算法...由于快速排序的原地排序特性(不需要额外的存储空间),它在空间效率上优于许多其他高级排序算法。在WinForm应用中,快速排序可以有效地处理大量数据的排序需求,提供良好的用户体验。

    java实现的shell排序快速排序归并排序堆排序

    本篇将详细介绍标题所提及的四种排序算法:Shell排序、快速排序、归并排序以及堆排序。 1. **Shell排序**: Shell排序是一种改进的插入排序,由Donald Shell于1959年提出。它通过设置一个间隔序列,使得数组中的...

    快速排序 希尔排序 插入排序 折半排序算法

    - 由于其简单性,插入排序常用于其他高级排序算法的基础。 4. **折半排序(Binary Insertion Sort)**: - 折半插入排序是插入排序的一个变体,它在插入元素时使用二分查找来确定插入位置,从而减少比较次数。 -...

    高级排序 数据结构

    在高级排序中,归并排序、堆排序、希尔排序和快速排序是四种非常重要的算法,它们各自有着独特的原理和应用。下面将详细阐述这四种排序算法。 1. **归并排序(Merge Sort)**: 归并排序是一种分治策略的典型应用。...

    易语言高级表格各列同步排序

    虽然易语言的高级表格控件可能会提供内置的排序功能,但为了实现高效排序,开发者可能需要了解和实现如快速排序、归并排序等高效的排序算法。这些算法能在大数据量时显著提高性能。 在提供的压缩包文件中,"易语言...

    六种基本排序算法,堆,归并,希尔,快速排序等

    在计算机科学中,排序算法是数据处理的重要组成部分,它们用于将一组无序的数据按照特定顺序进行排列。...了解这些基础排序算法有助于我们理解更高级的排序算法,如快速排序、归并排序的变体以及各种优化技术。

    多线程实现冒泡排序和快速排序

    本文将深入探讨如何使用多线程来实现冒泡排序和快速排序这两种经典的排序算法,这对于初学者来说是一次很好的学习机会。 首先,让我们理解冒泡排序。冒泡排序是一种简单直观的排序算法,它的基本思想是通过重复遍历...

    冒泡排序、选择排序、插入排序

    总的来说,这些排序算法的实现有助于理解排序的基本原理,为学习更高级的排序算法,如快速排序、归并排序和堆排序等打下基础。在实际应用中,我们会根据数据规模、数据特性以及性能需求选择合适的排序算法。

    利用汇编语言实现快速排序,汇编语言排序算法

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法,通过选取一个“基准”元素,将数组分为两个子数组,使得一个子数组的所有元素都小于基准,另一个子数组的所有...

    选择排序、冒泡排序、快速排序、折半查找

    虽然冒泡排序简单易懂,但它的效率较低,尤其对于大规模数据,性能不如其他高级排序算法。 快速排序是一种高效的排序算法,由C.A.R. Hoare在1960年提出。它的基本思想是采用分治法,选取一个基准元素,将数组分为两...

    Java 快速排序

    总的来说,快速排序是一种非常重要的排序算法,对于理解分治法和递归有着重要的意义,也是很多其他高级算法的基础。在Java编程中,熟练掌握快速排序能够帮助开发者编写出更高效、更稳定的代码。

    易语言实现高级表格根据某列文本、数值排序

    在实现表格排序时,可以先对某一列的数据进行排序,然后使用二分查找快速定位目标数据。 2. **实现步骤**: - **获取数据**:首先,你需要获取表格控件中的所有数据,这通常通过遍历表格的行和列来完成,将数据...

Global site tag (gtag.js) - Google Analytics