說明
在 快速排序法(一) 中,每次將最左邊的元素設為軸,而之前曾經說過,快速排序法的加速在於軸的選擇,在這個例子中,只將軸設定為中間的元素,依這個元素作基準進行比較,這可以增加快速排序法的效率。
解法
在這個例子中,取中間的元素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语言实现为初学者提供了很好的学习材料,特别是在VC++6.0环境下进行...
### C经典算法之快速排序法(二) #### 知识点概述 本篇文章将深入探讨快速排序算法的一个改进版本,并通过具体的代码实现来展现这一优化思路。在快速排序法(一)的基础上,本文重点关注轴的选择对算法性能的影响...
快速排序和二分查找是计算机科学中非常基础且重要的算法,它们在数据处理和效率提升方面发挥着关键作用。快速排序是一种高效的排序算法,而二分查找则是一种在有序序列中寻找特定元素的有效方法。 快速排序由英国...
快速排序和折半查找是两种在计算机科学中广泛使用的算法,尤其在数据处理和搜索操作中扮演着重要角色。在Java编程中,这两种算法都可以通过递归和分治策略进行实现,以提高效率和可读性。下面我们将深入探讨这两个...
#### 二、快速排序算法原理 快速排序的核心在于选择一个基准值,并根据这个基准值将待排序的数据分为两部分:一部分的所有数据都比另一部分的小(或大),然后再按此方法对这两部分数据分别进行快速排序,整个排序...
根据给定文件中的标题、描述、标签以及部分内容,可以总结并提炼出以下关于“使用JAVA语言实现的对数据的快速排序法”的相关知识点: ### 一、知识点概述 #### 标题:用JAVA语言实现的对数据的快速排序法 - **主要...
其基本思想是采用分治法,通过选取一个基准元素,将待排序序列分为两个子序列,使得一个子序列的所有元素都小于基准,另一个子序列的所有元素都大于基准,然后对这两个子序列递归地进行快速排序。在这个过程中,关键...
3. **快速排序**(Quick Sort):快速排序是一种高效的排序算法,采用“分而治之”的策略。它选取一个基准元素,将数组分为两部分,一部分的所有元素都小于基准,另一部分所有元素都大于基准,然后递归地对这两部分...
### 二分搜索 #### 实验目的 - 掌握分治法的基本思想,并学会如何应用这一策略来...以上三个实验不仅介绍了二分搜索、快速排序以及背包问题的基本原理,还提供了具体的C++代码实现,有助于深入理解和学习这些算法。
常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...
在实际编程中,还可以结合各种优化策略,如三向切分快速排序、插入排序的二分查找优化等,进一步提高排序效率。对于这些算法的实现,可以参考`sorting-algorithm-master`这个压缩包中的代码,通过阅读和理解代码,能...
快速排序是一种高效的排序算法,由C.A.R. Hoare在1960年提出。它采用了分治法的策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。 知识点一:快速排序算法的原理 快速排序的基本思想是通过...
#### 二、快速排序的工作原理 快速排序的核心思想是选取一个基准元素,并根据这个基准元素将原序列划分为两个子序列,使得一个子序列中的所有元素都不大于基准元素,另一个子序列中的所有元素都不小于基准元素。这...
实验结果表明,随着数据规模的增加,快速排序和二分查找仍然能保持较高的效率。 程序源码中展示了快速排序函数`quicksort`的实现,以及一个简化的二分查找函数`BinarySearch`。快速排序函数采用递归方式,选取数组...
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)** 快速...
它的基本思想是分治法,通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到...