快排算法实现

public class QuickSort {

    public static void sort(int arr[],int low,int high){
        int l=low;
        int h=high;
        int temp=arr[low];
        while(l<h)
        {
            while(l<h&&arr[h]>=temp) h--;
            arr[l]=arr[h];
            while(l<h&&arr[l]<=temp) l++;
            arr[h]=arr[l];
        }
        System.out.println("h:"+h+" l:"+l);
        arr[l]=temp;
        if(l>low)sort(arr,low,h-1);
        if(h<high)sort(arr,l+1,high);
    }

    public static void main(String[] args)
    {
        int a[]={5,8,7,1,3,2,6,4};
        sort(a,0,a.length-1);
        for(int i=0;i<a.length;i++)
            System.out.print(a[i]+" ");
    }

}
时间: 2024-10-09 19:42:34

快排算法实现的相关文章

随机快排算法

1 package Sort; 2 3 import org.junit.Test; 4 5 // 随机快排算法 6 public class RandQuickSort { 7 8 // 交换数组中的两个元素 9 public void exchange(int[] array, int index1, int index2) { 10 int tmp = array[index1]; 11 array[index1] = array[index2]; 12 array[index2] = t

关于快排算法的学习

写在前面: 算法设计与分析,这门课其实在大学都学习过,也受到了很多启发,只是隔了很久,大多已经忘记了,想趁这个机会重新学习一下. 因为刚开始学习,可能初期的博客内容大多是跟着前辈们学习的,后面可能会尝试总结一些笔记和心得,看看能不能启发一些其他的方面. 下面是找的关于快排的一些资料,这篇觉得确实不错,原地址:https://blog.csdn.net/yzllz001/article/details/50982841 高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序

python快排算法

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 1 def kp(arr,i,j): 2 if i < j: 3 base = kpgc(arr,i,j) 4 kp(arr,i,base) 5 kp(arr,base+1,j) 6 def kpgc(arr,i,j): 7 base = arr[i] 8 while i < j: 9 whil

快排算法的简单实现

java实现: 细节和注解都在注释在代码中了. 1 private static int position(int[] ary,int low,int high){ 2 int i = low,j = high+1; 3 int pivot = ary[low];//选定中轴元素 4 while(true){ 5 while(ary[++i] < pivot) {//遇到大于等于pivot时停下 6 if (i == high) {break;}//此处有必要检查,当pivot刚好为当前序列的最

快排算法的深入理解

简述 给每组数分成小.中.大 三种,利用递归思想进行排序.时间复杂度是n*log2n  (log2n代表2的多少次方等于n),其中log2n代表组数.n*log2n代表所有数的对换次数所用的时间. 实例说明 代码: def kuaiPai(num): da,zhong,xiao=[],[],[] if len(num)<=1: return num pivo=num[0] for i in range(len(num)): if i>num[0]: da.append(i) elif i<

排序算法-冒泡——插入——快排

冒泡排序,往两个方向泡,一个往小泡,一个网大泡 #include<stdio.h> #include<stdlib.h> #include<time.h> void bubble_sort(int *a,int n){ int temp; for(int i=0;i<n;i++) for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } v

关于利用快排思想求第K小数的分析

最近复习快排算法,记得当时最有意思的是可以用快排的partition函数求出第K小数 于是上网搜索一番,发现都只是贴出了代码.无奈只好自己研究了下 利用快排partition求第k小数不得不从partition函数开始说: 快速排序的思想是在一组待排序的数中,找出一个数作为分界,使得它前面的数都比它小,后面的数都比它大.这个数叫做枢轴 当求出一组数的枢轴以后,一组数就可以以枢轴为界限分成两组,我们可以递归的找出这两个组的枢轴,只到每组只有一个数 这里我们应该注意的是,partition函数返回的

F#之旅4 - 小实践之快排

参考文章:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/posts/fvsc-quicksort.html F#之旅4 - 小实践之快排 这次这篇呢,就不翻译了,因为原文确实是相当的简单.先贴一下能跑的代码: 这里贴的不是文本,如果你也想尝试一下,建议你抄一遍,或者理解之后自己写一遍.来看看都有那些要注意的点吧: 1.快排算法,这里用的递归的形式,把所有数分成三部分,[比第一个元素小的部分] [第一个元素] [比第一个元素

大话快排 和 归排的渊源

一:起因 (1)包括冒泡算法.快排算法.插入排序算法等:还有基于外部排序的归并排序(以二路归并排序为例 ) 但是基本上在一个数量级上: (2) mergesort (归并排序) 可以应用在外部排序,这与基于内存的quicksort(快速排序)略有不同,他们的算法复杂度都可以达到O(nlogn) (3)mergesort 是稳定的排序算法,需要额外的空间开销O(n):quicksort 是非稳定的排序算法,额外的空间开销O(1):两者的核心思想都来源与分支的策略(divide and conque