`
- 浏览:
99686 次
- 性别:
- 来自:
济南
-
另一种经典的交换排序是快速排序,快速排序的效率很高,但是空间复杂度较大,因为快速排序使用了递归,而递归的实现需要一个栈。快速排序的算法思想是:(假设数据存放在数组a[n]中)
1.如果待比较的数组长度为0或者1,则不用比较,直接返回。
2.如果待比较的数组长度大于1,则随机的选择一个中枢值(centrum),然后分别从数组的两端开始遍历,并且把从左边遍历找到的大于centrum的元素和从右边遍历找到的小于centrum的元素进行交换,直到数组遍历完毕(即:左边遍历指针指向的索引大于或等于右边遍历指针指向的索引)。
3.交换中枢元素和右边遍历指针指向的元素,这样原来的数组以中枢元素为界分成了两个数组,且左边数组的元素都不大于中枢,右边数组的元素都不小于中枢,然后分别对两个子数组分别进行快速排序。
快速排序的java实现如下:
public static void quickSort(int[] elements,int begin,int end){
if(begin < end){
int centrum = elements[begin];//选择第一个元素作为中枢
int front = begin+1;
int back = end;
while(front <= back){ //第一次排序从左边右边同时开始搜索到中
//间停止
while((front <= end) && (elements[front] < centrum)) front++;
//从左向右搜找出比centrum大的 elements[front] >= centrum
while((back >= begin) && (elements[back] > centrum)) back--;
//从右向左搜 找出比centrum小的 elements[back] <= centrum
if(front < back){
swap(elements,front,back);//如果搜出来的两个结果
//的序列号front<back 则交换两个结果的位置。否则跳出循环,即搜索的指针相遇了
}else{
break;
}
}
//分割成两个块比centrum小的,比centrum大的
if(begin < back)
swap(elements,begin,back);//交换centrum和最后从右边搜索
//出来的比centrum小的一个元素,交换他们的位置,这样back索引左边
//的都比它小。
quickSort(elements,begin,back-1);
quickSort(elements,back+1,end);
}
}
private static void swap(int[] elements,int i, int j){
int temp = elements[i];
elements[i] = elements[j];
elements[j] = temp;
}
public static void main(String[] args) {
int [] a = new int[]{5,3,7,9,1,2,6,4,8};
quickSort(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本篇文章将详细解读“CObList 快速排序算法代码”,帮助读者深入理解其工作原理及其实现细节。 #### 二、CObList简介 `CObList` 是 MFC(Microsoft Foundation Classes)框架中的一个类,用于实现双向链表的功能。...
在深入分析这篇标题为“基于FPGA的并行全比较排序算法”的文章之前,先明确几个关键点:FPGA(Field-Programmable Gate Array,现场可编程门阵列),并行处理和排序算法。FPGA是一种可以通过编程来配置的集成电路,...
这篇文章主要介绍了一个基于 Delphi 开发的软件,用于动态图示分析和演示35种不同的基于比较的内部排序算法。内部排序是指数据记录在内存中进行的排序过程,不涉及外部存储器。以下是对这些算法的详细说明: 1. **...
这篇2019年的排序算法总结涵盖了多种经典的排序算法,包括冒泡排序、插入排序、折半插入排序、希尔排序以及选择排序和快速排序。 1. 冒泡排序: 冒泡排序是最简单的排序算法之一,通过不断比较相邻元素并交换位置来...
文中讨论了排序算法的概念、特点、C语言实现方法以及算法的时间复杂度,还对这些排序算法的适用场景进行了说明。以下是对文档中知识点的详细解析: 1. 排序算法的基本概念 排序算法是指将一组数据按照特定顺序进行...
数据结构与算法是计算机科学...在实际应用中,更高效的排序算法,如快速排序、归并排序和堆排序,通常更适合处理大规模数据。然而,冒泡排序的教学价值不可忽视,它有助于理解排序算法的基本原理和分析算法效率的方法。
本篇文章将详细讲解标题中提到的六种常见排序算法的Java实现。 1. **冒泡排序**:冒泡排序是最基础的排序算法之一,它通过不断交换相邻的逆序元素来逐渐将较大的元素“浮”到数组的前端。在Java中,冒泡排序的基本...
这篇文档是关于程序设计课程实践中的一次作业,主要探讨了三种不同的排序算法:快速排序(QuickSort)、大顶堆排序(BigTopReactor,这里可能是作者对标准堆排序的一个变体)以及选择排序(SelectionSort)。...
这篇文档主要介绍了十一种常见的排序算法,包括它们的原理、示例分析以及JavaScript语言的实现。以下是这些排序算法的详细说明: 1. **冒泡排序**(Bubble Sort):通过不断比较相邻元素并交换,使得小元素逐渐“浮...
本篇文章将深入探讨几种常见的排序算法,并通过C语言代码示例进行说明。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单直观的排序算法,通过不断交换相邻的未排序元素来逐步将最大或最小的元素“冒”到数组的一端...
最后,快速排序是一种高效的排序算法,通过选取一个“基准”元素,然后将所有小于基准的元素放在其左边,大于基准的放在右边,再对左右两个子序列递归进行快速排序。文章讨论了如何优化划分过程,比如选取合适的基准...
总结而言,“快速排序改进(取首尾平均值做枢轴)”通过对枢轴选择策略的优化,提高了快速排序算法在处理某些特定数据分布时的性能表现,尤其是在数据偏斜严重的情况下,能够更有效地平衡左右子数组的大小,从而减少...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它是基于分治策略的典型应用,被广泛应用于各种编程语言和计算环境中。本篇将详细介绍快速排序的原理、实现步骤以及其优缺点。 **一、...
这篇“数据结构各种内排序性能比较课程设计报告”旨在通过对比多种排序算法,了解它们的性能差异,以便在实际应用中选择最适合的方法。以下是几种排序算法的详细说明: 1. **冒泡排序**(Bubble Sort): 冒泡排序...
这篇文档标题为“数据结构课程设计报告---几种排序算法的演示(附源代码.doc)”,说明这是一份关于数据结构课程的报告,重点是演示了几种不同的排序算法,并且提供了相应的源代码。从描述和标签来看,这应该是一个...
《用C语言解决各种排序问题》是一篇关于利用C语言实现常见排序算法的课程设计报告。该报告旨在通过实现和比较不同的排序算法,帮助学习者深入理解数据结构和排序算法的原理及其应用。以下是各排序算法的详细说明: ...
总而言之,这篇文章深入探讨了快速排序算法在特定条件下的性能表现,并提出了一个能够使快速排序退化到平方级复杂度的对抗性方法。这种方法不仅对理解快速排序算法的工作原理和潜在缺陷有帮助,而且在实际应用中也...
根据所提供的文档信息,以下是关于“基于非支配排序的改进粒子群算法的含分布式电源的配电网规划”的详细知识点说明: 1. 分布式电源(DG)的含义及特点: 分布式电源是指集成或单独使用的靠近用户的小型模块化发电...
然后,可以使用各种排序算法(如快速排序、归并排序或冒泡排序)对汉字列表进行排序。考虑到性能,可能会选择时间复杂度较低的排序算法。 在Java中,可以使用`java.util.Comparator`接口自定义比较规则,根据笔画数...
《信息学奥赛算法基础篇》是一篇关于算法在信息学奥赛中重要性的文档,由作者avex79在信息学奥赛辅导教育博客上分享。本文主要讲解了算法的基本概念、特征以及如何评估算法的效率。 首先,算法被定义为解决特定问题...