`
异步获取爱
  • 浏览: 80012 次
  • 性别: Icon_minigender_1
  • 来自: 大男子主义世界
社区版块
存档分类
最新评论

快速排序法(二)

J# 
阅读更多
說明
在 快速排序法(一) 中,每次將最左邊的元素設為軸,而之前曾經說過,快速排序法的加速在於軸的選擇,在這個例子中,只將軸設定為中間的元素,依這個元素作基準進行比較,這可以增加快速排序法的效率。
解法
在這個例子中,取中間的元素s作比較,同樣的先得右找比s大的索引 i,然後找比s小的索引 j,只要兩邊的索引還沒有交會,就交換 i 與 j 的元素值,這次不用再進行軸的交換了,因為在尋找交換的過程中,軸位置的元素也會參與交換的動作,例如:
41 24 76 11 45 64 21 69 19 36

首先left為0,right為9,(left+right)/2 = 4(取整數的商),所以軸為索引4的位置,比較的元素是45,您往右找比45大的,往左找比45小的進行交換:

    * 41 24 76* 11 [45] 64 21 69 19 *36
    * 41 24 36 11 45* 64 21 69 19* 76
    * 41 24 36 11 19 64* 21* 69 45 76
    * [41 24 36 11 19 21] [64 69 45 76]


完成以上之後,再初別對左邊括號與右邊括號的部份進行遞迴,如此就可以完成排序的目的。

public class Sort {
    public static void quick(int[] number) {
        sort(number, 0, number.length-1);
    }
    
    private static void sort(int[] number, int left, int right) {
        if(left < right) { 
            int s = number[(left+right)/2]; 
            int i = left - 1; 
            int j = right + 1; 

            while(true) { 
                // 向右找
                while(number[++i] < s) ;
                // 向左找
                while(number[--j] > s) ; 
                if(i >= j) 
                    break; 
                swap(number, i, j); 
            } 

            sort(number, left, i-1);   // 對左邊進行遞迴 
            sort(number, j+1, right);  // 對右邊進行遞迴 
        }
    }
    
    private static void swap(int[] number, int i, int j) {
        int t = number[i]; 
        number[i] = number[j]; 
        number[j] = t;
    }
}
分享到:
评论

相关推荐

    直接排序法,折半插入法,希尔排序法,快速排序法(c语言实现)

    直接排序法、折半插入法、希尔排序法和快速排序法是计算机科学中常见的排序算法,它们在数据处理和算法理解上都具有重要的地位。这些排序算法的C语言实现为初学者提供了很好的学习材料,特别是在VC++6.0环境下进行...

    C经典算法之快速排序法(二)

    ### C经典算法之快速排序法(二) #### 知识点概述 本篇文章将深入探讨快速排序算法的一个改进版本,并通过具体的代码实现来展现这一优化思路。在快速排序法(一)的基础上,本文重点关注轴的选择对算法性能的影响...

    快速排序对数组排序,二分查找。

    快速排序和二分查找是计算机科学中非常基础且重要的算法,它们在数据处理和效率提升方面发挥着关键作用。快速排序是一种高效的排序算法,而二分查找则是一种在有序序列中寻找特定元素的有效方法。 快速排序由英国...

    java 快速排序 折半查找的界面实现 (递归与分治法)

    快速排序和折半查找是两种在计算机科学中广泛使用的算法,尤其在数据处理和搜索操作中扮演着重要角色。在Java编程中,这两种算法都可以通过递归和分治策略进行实现,以提高效率和可读性。下面我们将深入探讨这两个...

    快速排序算法matlab

    #### 二、快速排序算法原理 快速排序的核心在于选择一个基准值,并根据这个基准值将待排序的数据分为两部分:一部分的所有数据都比另一部分的小(或大),然后再按此方法对这两部分数据分别进行快速排序,整个排序...

    用JAVA语言实现的对数据的快速排序法

    根据给定文件中的标题、描述、标签以及部分内容,可以总结并提炼出以下关于“使用JAVA语言实现的对数据的快速排序法”的相关知识点: ### 一、知识点概述 #### 标题:用JAVA语言实现的对数据的快速排序法 - **主要...

    快速排序和二分查找

    其基本思想是采用分治法,通过选取一个基准元素,将待排序序列分为两个子序列,使得一个子序列的所有元素都小于基准,另一个子序列的所有元素都大于基准,然后对这两个子序列递归地进行快速排序。在这个过程中,关键...

    分治法应用(二分查找归并排序快速排序比赛日程安排)

    3. **快速排序**(Quick Sort):快速排序是一种高效的排序算法,采用“分而治之”的策略。它选取一个基准元素,将数组分为两部分,一部分的所有元素都小于基准,另一部分所有元素都大于基准,然后递归地对这两部分...

    二分搜索_快速排序_背包问题

    ### 二分搜索 #### 实验目的 - 掌握分治法的基本思想,并学会如何应用这一策略来...以上三个实验不仅介绍了二分搜索、快速排序以及背包问题的基本原理,还提供了具体的C++代码实现,有助于深入理解和学习这些算法。

    常见经典排序算法(C语言)1希尔排序 二分插入法 直接插入法 带哨兵的直接排序法 冒泡排序 选择排序 快速排序 堆排序.docx

    常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...

    基于比较的排序算法汇总 选择排序法 插入排序法 归并排序法 快速排序法 堆排序法 冒泡排序法 希尔排序法

    在实际编程中,还可以结合各种优化策略,如三向切分快速排序、插入排序的二分查找优化等,进一步提高排序效率。对于这些算法的实现,可以参考`sorting-algorithm-master`这个压缩包中的代码,通过阅读和理解代码,能...

    快速排序.pdf

    快速排序是一种高效的排序算法,由C.A.R. Hoare在1960年提出。它采用了分治法的策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。 知识点一:快速排序算法的原理 快速排序的基本思想是通过...

    算法领域,快速排序(Quicksort),用于排列数据

    #### 二、快速排序的工作原理 快速排序的核心思想是选取一个基准元素,并根据这个基准元素将原序列划分为两个子序列,使得一个子序列中的所有元素都不大于基准元素,另一个子序列中的所有元素都不小于基准元素。这...

    快速排序(分治策略)报告.doc

    实验结果表明,随着数据规模的增加,快速排序和二分查找仍然能保持较高的效率。 程序源码中展示了快速排序函数`quicksort`的实现,以及一个简化的二分查找函数`BinarySearch`。快速排序函数采用递归方式,选取数组...

    快速排序法.txt

    Problem Description ...第二行输入n个整数。 Output Description 输出排序后的整数,每个整数之间以一个空格分隔。注意:最后一个整数后面没有空格。 Sample Input 6 5 2 4 6 1 3 Sample Output 1 2 3 4 5 6

    数据结构 快速排序 输出每一趟结果

    快速排序是一种高效的排序算法,采用分治法策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。快速排序在平均情况下的时间复杂度为O(n log n),最坏情况下的时间复杂度为O(n^2)。其主要优点是...

    快速排序 数据结构 实现

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

    快速排序、堆排序、归并排序、希尔排序实现

    快速排序、堆排序、归并排序和希尔排序是四种经典的排序算法,它们在计算机科学中有着广泛的应用。这里我们将深入探讨这些排序算法的原理、实现方式以及它们在C++编程中的应用。 **快速排序(Quick Sort)** 快速...

    快速排序的非递归实现

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

Global site tag (gtag.js) - Google Analytics