`
什么都不懂的孩子
  • 浏览: 28036 次
社区版块
存档分类
最新评论

快速排序(C++版本)

阅读更多

快速排序的思想,如果说是分治法,那也不详细,我看到一个非常适合的描述就是“挖坑填数+分治法”

        挖坑填数:就是从数组中取一个基数(就想一个标杆来和其他的数比较),赋值给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++代码和相关描述,我们可以深入解析快速排序算法在C++中的实现细节。快速排序是一种高效的排序算法,由Tony Hoare在1960年提出,其核心思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分的...

    数据结构--快速排序C++源代码

    数据结构--快速排序C++源代码,自己编写调试,代码简单易懂,不长

    快速排序c++源代码

    在C++中实现快速排序,主要涉及到以下几个关键步骤: 1. **选择基准元素(Pivot Selection)**:这是快速排序的第一步,需要从待排序的数组中选取一个元素作为基准。通常选取第一个元素、最后一个元素或中间元素,...

    快速排序C++源代码

    快速排序(quick sort)C++源代码

    快速排序C++的实现

    5. **代码实现**:展示C++实现的快速排序代码,包括主函数、分区函数和快速排序函数。 6. **优缺点**:讨论快速排序的优缺点,如效率高、不稳定、对输入敏感等。 7. **应用实例**:列举快速排序在实际问题中的应用。...

    c++快速排序示例

    用c++写的快速排序 Swap交换两个int类型的数据 Sort排序 QuickSort快速排序(递归) main

    多进程多线程快速排序C++源码

    在这个“多进程多线程快速排序C++源码”中,开发者采用了并行计算的概念,结合了Windows操作系统下的多进程和多线程技术,以进一步提升排序的速度。多进程是指同时运行多个独立的程序,它们各自拥有独立的内存空间,...

    《数据结构课设》快速排序C++实现

    在这个《数据结构课设》中,你将学习到如何用C++实现快速排序。C++是一种通用的、面向对象的编程语言,具有丰富的库支持和高效性,是实现算法的理想选择。C++中的标准模板库(STL)虽然提供了sort函数,但理解并实现...

    快速排序,冒泡排序,选择排序C++源代码

    用C++写了以上三种排序算法,对初学数据结构的同学一个参考

    C++语言的算法实现包括插入排序冒泡排序堆排序快速排序

    本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...

    快速排序C++

    数据结构のC++快速排序。VC6.0调试通过。

    快速排序c++源码.zip

    快速排序c 快速排序c++源码.zip快速排序c++源码.zip快速排序c++源码.zip

    快速排序算法c++实现

    在C++中实现快速排序,通常需要以下步骤: 1. **选择基准元素**:可以随机选取数组中的一个元素作为基准,或者选择第一个、最后一个元素,甚至选择中间元素。 2. **分区操作**:创建两个指针,一个指向数组的开始...

    快速排序C++算法

    严奶奶《数据结构》书上快速排序的C++算法实现,随机生成10个100以内的数,然后快速排序,并输出比较次数

    快速排序问题(C++)

    在C++中实现快速排序,首先我们需要选择一个元素作为“基准”(pivot)。通常选取数组的第一个元素或者最后一个元素。然后,我们遍历数组,将所有小于基准的元素移动到基准的左边,大于基准的元素移动到右边。这个...

    快速排序法 C++ 初学者代码

    快速排序法 C++ 初学者代码 简单的准确的

    快速排序c++,快速排序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++

    计算机算法课程的作业,用c++实现了归并排序和快速排序,并比较了两种算法的速度。测试数据为随机生成,可设置为10万、100万、1000万大小的数组。在代码中提供了详细的注释,在容易出错的地方进行了解释。下面是得到...

    快速排序算法代码 C++

    在C++中实现快速排序,首先我们需要定义一个函数作为划分操作的核心,通常被称为`partition`。这个函数会选择一个基准元素(pivot),并将数组中的元素按照与基准的大小关系分成两个子序列:小于基准的元素放在基准...

    c++模板类实现快速排序

    以下是一个简单的C++模板类实现快速排序的示例: ```cpp template void quickSort(T arr[], int left, int right) { if (left ) { int pivotIndex = partition(arr, left, right); quickSort(arr, left, pivot...

Global site tag (gtag.js) - Google Analytics