快速排序的思想,如果说是分治法,那也不详细,我看到一个非常适合的描述就是“挖坑填数+分治法”
挖坑填数:就是从数组中取一个基数(就想一个标杆来和其他的数比较),赋值给temp变量,这样我们就不用担心它会丢失,就相当于我们把这个数先挖出来,留一个坑给其他的数字填充,其他的所有数都跟这个数比较,值得注意的是:如果我们取的是最左边(右边)的数,那么我们就要先从右边(开始比)。
分治:如果按照升序排列,那么我们就需要把右边所有比基数小的数,都一个个挪到数组左边,大的放在右边。在一遍循环下来以后,我们基数就在数组中间了,比基数小的就在左边,比基数大的在基数右边,就按照这个基数,把数组拆分为两组,然后重新对两组数继续上面的方法,直到数组中只有一个元素,这个时候数组就算排列好了。
简述过程:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
下面贴上代码:
#include <iostream> using namespace std; int a[100]; void quick_sort(int *a, int l ,int r){ int right = r, left = l; if(r <= l) return;//这里就是判断数组是不是只有一个元素 int x = a[l];//我们选择左边的作为基数 while(right > left){// while(x <= a[right] && right > left){//先从右边比较,查找到数组右边比基数小的数的下标 right--; } if(left < right){//做交换赋值,把小的数放在数组左边 a[left++]=a[right]; } while(x >= a[left] && right > left){//查找到数组左边比基数大的数的下标 left++; } if(left < right){//做交换赋值,把大的数放在数组右边 a[right--] = a[left]; } } a[right] = x;//最后要把基数赋值到最中间的那个位置 //对分成两组的数组分别排序 quick_sort(a,l,right-1); quick_sort(a,right+1,r); } int main() { int sizea =0; cin>>sizea; for(int i = 0;i < sizea; i++){ cin>>a[i]; } quick_sort(a,0,sizea-1); for(int i = 0;i < sizea; i++){ cout<<a[i]<<" "; } return 0; }
如果还是看不懂的话,那推荐一篇博文
http://blog.csdn.net/morewindows/article/details/6684558 欢迎小伙伴赐教
相关推荐
根据给定的C++代码和相关描述,我们可以深入解析快速排序算法在C++中的实现细节。快速排序是一种高效的排序算法,由Tony Hoare在1960年提出,其核心思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分的...
数据结构--快速排序C++源代码,自己编写调试,代码简单易懂,不长
在C++中实现快速排序,主要涉及到以下几个关键步骤: 1. **选择基准元素(Pivot Selection)**:这是快速排序的第一步,需要从待排序的数组中选取一个元素作为基准。通常选取第一个元素、最后一个元素或中间元素,...
快速排序(quick sort)C++源代码
5. **代码实现**:展示C++实现的快速排序代码,包括主函数、分区函数和快速排序函数。 6. **优缺点**:讨论快速排序的优缺点,如效率高、不稳定、对输入敏感等。 7. **应用实例**:列举快速排序在实际问题中的应用。...
用c++写的快速排序 Swap交换两个int类型的数据 Sort排序 QuickSort快速排序(递归) main
在这个“多进程多线程快速排序C++源码”中,开发者采用了并行计算的概念,结合了Windows操作系统下的多进程和多线程技术,以进一步提升排序的速度。多进程是指同时运行多个独立的程序,它们各自拥有独立的内存空间,...
在这个《数据结构课设》中,你将学习到如何用C++实现快速排序。C++是一种通用的、面向对象的编程语言,具有丰富的库支持和高效性,是实现算法的理想选择。C++中的标准模板库(STL)虽然提供了sort函数,但理解并实现...
用C++写了以上三种排序算法,对初学数据结构的同学一个参考
本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...
数据结构のC++快速排序。VC6.0调试通过。
快速排序c 快速排序c++源码.zip快速排序c++源码.zip快速排序c++源码.zip
在C++中实现快速排序,通常需要以下步骤: 1. **选择基准元素**:可以随机选取数组中的一个元素作为基准,或者选择第一个、最后一个元素,甚至选择中间元素。 2. **分区操作**:创建两个指针,一个指向数组的开始...
严奶奶《数据结构》书上快速排序的C++算法实现,随机生成10个100以内的数,然后快速排序,并输出比较次数
在C++中实现快速排序,首先我们需要选择一个元素作为“基准”(pivot)。通常选取数组的第一个元素或者最后一个元素。然后,我们遍历数组,将所有小于基准的元素移动到基准的左边,大于基准的元素移动到右边。这个...
快速排序法 C++ 初学者代码 简单的准确的
以下是一个简单的快速排序C++实现: ```cpp #include using namespace std; int partition(int arr[], int low, int high) { int pivot = arr[high]; // 选择最后一个元素作为基准 int i = (low - 1); // 将i设...
计算机算法课程的作业,用c++实现了归并排序和快速排序,并比较了两种算法的速度。测试数据为随机生成,可设置为10万、100万、1000万大小的数组。在代码中提供了详细的注释,在容易出错的地方进行了解释。下面是得到...
在C++中实现快速排序,首先我们需要定义一个函数作为划分操作的核心,通常被称为`partition`。这个函数会选择一个基准元素(pivot),并将数组中的元素按照与基准的大小关系分成两个子序列:小于基准的元素放在基准...
以下是一个简单的C++模板类实现快速排序的示例: ```cpp template void quickSort(T arr[], int left, int right) { if (left ) { int pivotIndex = partition(arr, left, right); quickSort(arr, left, pivot...