快速排序-记录

ps:有一次朋友问到快速排序,嘴上说着简单没几行代码,直接写出来TMD费劲了,这次又被问了一次,又尴尬了,记录一下张张记性

原理(度娘):

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

代码(JAVA):

 

private static void QSort(int[] arr,int start,int end)
    {
        int from = start;
        int to = end;
        int key = arr[from];while(from<to)
        {
            while(to>from&&arr[to]>key)
            {
                to--;
            }
            if(to>from)
            {
                int tem = arr[from];
                arr[from] = arr[to];
                arr[to] = tem;
            }
            while(from<to&&arr[from]<key)
            {
                from++;
            }
            if (to>from) {
                int tem = arr[from];
                arr[from] = arr[to];
                arr[to] = tem;
            }

        }if (from>start) {
            QSort(arr, start, from-1);
        }
        if (to<end) {
            QSort(arr, to+1, end);
        }
    }

  

时间: 2024-11-05 20:44:11

快速排序-记录的相关文章

用PHP实现的快速排序算法(支持记录原始数组下标)

代码如下 <?php /** * 快速排序 */ define("MAX_LENGTH_INSERT_SORT", 7); class QuickSort { /** * 交换数组i和j的值 */ function swap(&$data=array(), $i, $j) { $temp = $data[$i]; $data[$i] = $data[$j]; $data[$j] = $temp; } /** * 交换数组data中子表的记录,是枢轴记录到位,并返回其所在位

【学习记录】关于自定义函数快速排序的那些事。。。

...前几天老妈又批我了,啊哈算法还没看完... 于是不甘落后的我开始努力看书...虽然我看了很多了... 从头开始!!! 1.自定义函数快速排序 如果一提起排序,你还想得是一下2行东西,那你就out了 #include<algorithm> sort(a,a+n); 这个效率虽然很高,但人外有人,天外有天,肯定有比这个更快的,那就是---快速排序 看着这个过程很像二分... 我们先给一列数:6 1 2 7 9 3 4 5 10 8 进行排序. 我们先将6作为基准数,将比6小的数“扔”到它的左

随机快速排序学习记录

Randomized Quicksort·running time is independent of input ordering·no assumptions about the input distribution·np specific input elict the worst-case behavior·the worst-case is determined only by a random-number generator pivot on random element Anal

排序算法 之 快速排序

快速排序是基于分治思想的一种排序算法,就像该方法的名字一样,速度比较快,所以叫做快速排序:它的平均时间复杂度为O(N*logN),最坏时间复杂度为O(n2),由于快速排序在序列元素数量多的时候速度比较快,所以很多语言内置的排序方法也是用快速排序实现的.快速排序也有很多优化的版本,比如在排序时基数的选择等等-下面就说一下一般的快速排序的实现. 基本思想: 快速排序的基本思想就是,先从待排序的序列中任选一个元素作为基数,然后将序列中的其他小于基数的元素放在基数的左边,大于或等于基数的元素放在基数的右

基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序)

冒泡排序 public static void bubbleSort(int[] arr){ int lgn = arr.length; for (int i = 0; i < lgn - 1; i++) { for (int j = 0; j < lgn - 1 - i; j++) { if(arr[j] > arr[j + 1]){ int temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } } 选择排序 publ

快速排序 VS compare排序

为了方便  ,我把bean写成了内部类 测试结论 ,快速排序吊打compare排序 ,可以自行测试 1 //测试调用 2 public static void main(String[] args) { 3 List<Student> list = new ArrayList<Student>(); 4 new test().add(list); 5 //记录旧数据 确定俩次排序使用的是同一数据 6 List<Student> stus = new ArrayList&

快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)

冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止.上述过程称为第一趟冒泡排序,接着第二趟对前面n-1个关键字进行同样操作,…… 快速排序是对冒泡排序的一种改进,通过一趟排序将记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,可分别对这两部分记录以递归的方法继续进行排序,以达到整个序列有序. 单趟Partition()函数过程请看

算法--排序--分治与快速排序

学习排序算法也有一段时间,一直没有好好整理下排序算法的相关知识,排序在算法中是最基础也是最重要的,所以有必要自己进行一番整理,在提高领悟算法本质的同时以备以后自己复习,顺便也将自己领悟到的一些思想进行记录. 下面简单整理下快排的算法感悟,当然,个人觉得领悟快排的核心思想分治才是学习这个算法的最重要目的. 一.快排的思想 1.分治思想.是的,快排最核心的思想就是:递归中重要的思想,分治.好吧,其实刚刚接触分治的时候,或者说递归的时候,我真的真的无法真正理解,感觉就是:好像理解了,但是细想又觉得有困

排序算法大荟萃——快速排序算法

1.快速排序 又称分治算法,分治的基本思想是蒋原问题分解为若干个规模更小但结构与原问题相似的子问题,然后递归地解决这鞋子问题,子问题的结组合为原问题的解. 快速排序是一种不稳定的算法,平均时间复杂度为O(n log n),最差情况是O(n^2),空间复杂度O(log n) (1)基本思想 过程如下:分解->求解->组合. 分解:在无序队列R[1...n]中任选一个元素k为基准记录,并且满足R[1...k].key<=R[k].key<=R[k+1...n].key 求解:递归调用快