//author:lilywangcn
public class QuickSort {
private static int[] array=new int[]{10,30,20,4,9,-1,6,10,20,4,10,15};
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
print();
quicksort(0,array.length-1);
print();
}
private static void quicksort(int left, int right){
if(left>=right) return;
int i=left;
int j=right+1;
int key=array[left];
while(true){
do{
i++;
}while(i<=right&&array[i]<key);
do{
j--;
}while(j>=left&&array[j]>key);
if(j<i) break;
System.out.println("exchange i="+i+",j="+j);
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
System.out.println("exchange left="+left+",j="+j);
int tmp=array[left];
array[left]=array[j];
array[j]=tmp;
quicksort(left,j-1);
quicksort(j+1,right);
}
private static void print(){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
System.out.println("");
}
}
算法复杂度:O(nlogn),算法不稳定。
运行结果:
10 30 20 4 9 -1 6 10 20 4 10 15
exchange i=1,j=10
exchange i=2,j=9
exchange i=7,j=7
exchange left=0,j=6
exchange i=1,j=5
exchange left=0,j=3
exchange i=2,j=2
exchange left=0,j=1
exchange left=4,j=4
exchange left=7,j=7
exchange i=9,j=11
exchange left=8,j=9
exchange left=10,j=11
-1 4 4 6 9 10 10 10 15 20 20 30
分享到:
相关推荐
本主题将详细探讨四种常见的排序算法:选择排序、插入排序、快速排序以及冒泡排序,它们都是用C语言实现的。以下是这些排序算法的详细解析: 1. **选择排序(Selection Sort)** - 选择排序是一种简单直观的排序...
快速排序是一种高效的排序算法,由C.R.A.Hoare在1962年提出。它基于分治策略,但其完整流程可以更准确地描述为“挖坑填数+分治法”。快速排序的核心思想是通过选取一个基准数,将数组分为两部分:一部分的所有元素都...
本主题将深入探讨四种常见的排序算法:归并排序、快速排序以及与链表相关的排序方法。 首先,我们来讨论归并排序(Merge Sort)。这是一种基于分治策略的排序算法。归并排序将大问题分解为小问题,然后逐步合并这些...
#### 二、快速排序 **1. 基本思想** 快速排序是一种非常高效的排序方法,它基于“分治”策略,主要分为三个步骤: - **划分**:选择一个记录作为“轴值”,将整个序列以轴值为基准划分为两个子序列。其中一个子...
希尔排序是一种基于插入排序的快速排序算法,由Donald Shell在1959年提出。它的主要特点是通过将待排序的序列分成若干个子序列来减少元素之间的比较次数,从而提高排序效率。希尔排序的核心思想是“增量序列”,即在...
### 二、快速排序示例 #### 分区过程 1. **初始化指针**:`i`从左向右扫描,`j`从右向左扫描。 2. **扫描指针**: - `i`从左向右移动,直到遇到第一个大于等于基准元素的位置。 - `j`从右向左移动,直到遇到第一...
堆排序是一种基于比较的排序算法,它通过构建和维护一个最大堆或最小堆来实现...这种排序方法适用于大型数据集,但相比其他内部排序算法,它的常数因子较大,因此在小规模数据排序中可能不如快速排序或插入排序效率高。
- **主要功能**:该程序的主要目的是使用Java语言实现对一系列数据进行快速排序的功能。 - **应用场景**:适用于需要对大量数据进行高效排序的实际应用场合。 #### 描述:该程序是用JAVA语言编写的,主要实现的是对...
虽然冒泡排序在效率上不如其他高级排序算法(如快速排序、归并排序),但它简单易懂,对于小型数据集或教学目的,冒泡排序仍然是一个很好的选择。在实际应用中,尤其是处理大量数据时,通常会选择更高效的排序算法以...
快速排序也基于分治法,选择一个“基准”元素,将所有小于基准的元素放在其前面,所有大于基准的元素放在其后面,然后对基准两侧的子序列递归地进行快速排序。 **链表快速排序步骤**: 1. **选择基准**:选择链表的...
算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...
### 数据结构快速排序算法实现详解 #### 实验目标与背景 快速排序算法是计算机科学领域中一种非常高效且常用的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)于1959年提出。它采用分治法策略来实现对数据...
在并行环境中,快速排序的并行性主要体现在两个方面:一是多个子问题可以独立解决,二是部分任务可以在划分阶段并行执行。 在串行版本的快速排序中,我们通常选择数组的第一个元素作为“轴”(pivot),然后通过一...
根据提供的文件信息,我们可以深入探讨快速排序这一算法的相关知识点,包括其原理、编程思路、涉及的知识点以及具体的实现方式。 ### 快速排序原理 快速排序是一种高效的排序算法,属于**分而治之**策略的一种典型...
- **选择**:NSGA-II采用快速非支配排序选择(Roulette Wheel Selection)和精英保留策略,确保最优解不会在进化过程中丢失。 - **交叉**:通常采用单点或多点交叉策略,交换两个父代个体的部分基因以产生子代。 ...
位排序和快速排序是两种不同的排序算法,它们在处理大量数据时各有特点。在这个场景中,我们关注的是如何使用这两种算法来对30万个由程序生成的数字进行排序。 首先,我们来了解一下位排序(Bitonic Sort)。位排序...
根据给定文件的信息,我们可以提炼出关于“快速排序”这一算法的相关知识点。下面将详细介绍快速排序的基本概念、工作原理、代码实现以及应用示例等内容。 ### 快速排序概述 快速排序是一种高效的排序算法,由英国...
38, 65, 97, 76, 13, 27]`,首次选择49作为基准,通过一系列交换,最终得到`[13, 38, 27, 49, 76, 97, 65]`,基准49位于中间,然后对左右两边的子数组 `[13, 38, 27]` 和 `[76, 97, 65]` 再次进行快速排序,如此...
例如,快速排序可以利用递归来实现,归并排序则可能需要用到STL中的`std::merge`函数,而冒泡排序则是一系列基本比较和交换操作的组合。 当选择排序算法时,开发者应考虑以下几个因素: 1. 时间复杂度:快速排序...
例如,插入排序和选择排序适合小规模数据,冒泡排序虽然效率较低但实现简单,堆排序和快速排序在处理大规模数据时有较好性能,而基数排序则能处理非负整数排序。在实际开发中,根据具体需求选择合适的排序算法是非常...