`

排序--快速排序

 
阅读更多
快速排序是一个分治和递归的一个思想。
快速排序思想是折半查找,从最右边开始查找,找到一个比k值小的然后对换,再从左边开始查找,找到一个比k值大的,然后对换。继续循环就完成第一次排序。拿到返回的位置后,左右两边开始递归。

package quicksort;

import java.util.Arrays;


/**
* @author liyu
*
*/
public class Sort {

public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] = {11, 2, 6, 15 , 16 ,8 ,9 ,3, 19, 20};
//int arr[] = {11, 2, 6, 15 , 16 ,8,8 ,9 ,3, 19, 20};
QuickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}

private static void QuickSort(int[] arr, int i, int j) {
// TODO Auto-generated method stub
int p = 0;
if(i<j){
p = partion(arr,i,j);
QuickSort(arr, p+1, j);
QuickSort(arr, i, p-1);
}
}
public static int partion(int[] arr,int i, int j){
//11 2 6 15  16 8 9 3 19 20 --->11 |3  2 6 15  16 8 9 _ 19 20 ----> 11 |3  2 6 _  16 8 9 15 19 20-->11 |3 2 6 9 16 8 _ 15 19 20
//-->11 |3  2 6 9 _ 8 16 15 19 20-->11 |3  2 6 9 8 11 16 15 19 20

int k = arr[i];
while(i<j){
//从右边边开始寻找一个比k小的值
while (i<j&&arr[j]>=k) j--;
//找到比k小的值后替换位置
arr[i] = arr[j];
while(i<j&&arr[i]<k)  i++;
arr[j] = arr[i];
}
arr[i] = k;
return i;
}



}
分享到:
评论

相关推荐

    快速排序 --- 非递归实现

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按...

    选择排序-插入排序-快速排序-冒泡排序

    本主题将详细探讨四种常见的排序算法:选择排序、插入排序、快速排序以及冒泡排序,它们都是用C语言实现的。以下是这些排序算法的详细解析: 1. **选择排序(Selection Sort)** - 选择排序是一种简单直观的排序...

    归并排序,排序等算法,数据结构,快速排序,链表排序

    本主题将深入探讨四种常见的排序算法:归并排序、快速排序以及与链表相关的排序方法。 首先,我们来讨论归并排序(Merge Sort)。这是一种基于分治策略的排序算法。归并排序将大问题分解为小问题,然后逐步合并这些...

    最快的排序算法 谁才是最强的排序算法:快速排序-归并排序-堆排序,排序算法数据结构

    但是,快速排序的实际执行时间却比堆排序更快,这是因为快速排序的 cache freundliness 比堆排序更好。 快速排序、堆排序和归并排序都是 O(nlogn) 的时间复杂度,但是它们的稳定性、辅助空间和 cache freundliness ...

    快速排序-算法报告.doc

    快速排序是一种高效的排序算法,由C.A.R. Hoare在1960年提出,它采用了分治(Divide and Conquer)策略。快速排序的基本思想是通过一趟排序将待排序的数据分割成两部分,其中一部分的所有数据都比另一部分的所有数据...

    算法设计与分析-1排序算法性能分析-冒泡/选择/插入/合并/快速排序-pre ppt

    快速排序由一个基准值(Pivot)划分,使得基准值左边的元素小于基准,右边的元素大于基准,然后递归地对左右两边的子序列进行快速排序。其平均时间复杂度同样是O(n log n),但最坏情况下为O(n^2),这通常发生在输入...

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...

    多线程排序---希尔排序、快速排序、堆排序

    快速排序的基本步骤包括选择一个基准元素,将数组分为两部分,一部分的元素都小于基准,另一部分的元素都大于基准,然后对这两部分分别进行快速排序。快速排序在平均和最好情况下的时间复杂度为O(nlogn),但最坏情况...

    冒泡排序---选择,插入和快速排序

    该算法的基本思想是:选择一个基准值,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归...

    快速排序-flash演示

    快速排序-flash演示 可自己输入数据.......

    快速排序-Pascal

    procedure qsort(l,r:longint); var k,t,i,j:longint; begin k:=(l+r)div 2; t:=a[k]; i:=l; j:=r; repeat

    经典排序算法源代码-插入排序-选择排序-冒泡排序

    通过阅读和实践这些代码,你可以深入理解排序算法的内部机制,为进一步学习更复杂的排序算法如快速排序、归并排序等奠定基础。同时,这些基础知识对于提升编程能力,优化数据处理效率,解决实际问题都有着重要作用。

    内部排序-快速和堆

    快速排序和堆排序是两种非常重要的内部排序算法,在计算机科学中有着广泛的应用。它们都是基于比较的排序方法,但各自有着独特的实现策略和性能特点。 快速排序由C.A.R. Hoare在1960年提出,其核心思想是分治法。...

    数据结构--快速排序C++源代码

    数据结构--快速排序C++源代码,自己编写调试,代码简单易懂,不长

    FPGA并行快速排序算法-位宽可设

    在本文中,我们将深入探讨基于FPGA的并行快速排序算法,特别关注“位宽可设”的特性。这种算法能够高效地处理大量数据,并且在硬件实现上具有很高的灵活性。我们将从以下几个方面来阐述这个主题: 一、快速排序算法...

    西南交通数据结构内部排序-多种排序算法的实现.docx

    本实验涉及了四种经典的内部排序算法:希尔排序、快速排序、堆排序和归并排序。 **希尔排序**(Shell Sort)是由希尔提出的,它是一种改进的插入排序。希尔排序的核心思想是将待排序的元素按照一定的间隔分组,对每...

    快速排序-算法.zip

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的...

    快速排序 快速排序例子

    ### 快速排序知识点解析 #### 一、快速排序简介 快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)在1960年提出。它采用分治策略来把一个序列分为较小和较大的两个子序列,然后递归地...

    算法-理论基础- 排序- 快速排序(包含源程序).rar

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治策略,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再...

    算法设计实验报告-快速排序和归并排序

    本实验旨在通过对两种经典排序算法——快速排序和归并排序的研究与实现,深入理解它们的基本原理、时间复杂度,并通过编程实践比较这两种算法在不同数据规模下的性能表现。 #### 二、快速排序 **1. 基本思想** ...

Global site tag (gtag.js) - Google Analytics