• 经典排序之 快速排序


    想利用这一两天复习一下几个经典的排序算法,今天先来看一下快速排序:

      我们知道快速排序的思想是:先找到一个枢轴,然后进行分块,将其中元素比枢轴小的元素放到枢轴左边,将比他大的放到他的右边,这样我们就完成了一遍基本排序。我们确定了一个数字在排好序的位置;之后利用递归再将枢轴左边的数据分块,将右边的数据分块即可

    算法实现:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 void swap( int &m, int &n){
     5     int temp = m;
     6     m = n;
     7     n = temp;
     8 }
     9 
    10 int Partition(int *data, int begin, int end){                                //找到枢轴,然后将左右的数据分开
    11     
    12     if(data == NULL || begin < 0 || end < 0){
    13         cout<<"the invalid array"<<endl;
    14     }
    15     
    16     int key = data[begin];
    17     int pos = begin;
    18     
    19     for(int index = begin + 1; index < end; index++){
    20         if(data[index] <= key){
    21             ++pos;
    22             swap(data[pos], data[index]);
    23         }
    24     }
    25     
    26     swap(data[begin], data[pos]);
    27     return pos;
    28 } 
    29 
    30 void QuickSort(int *data, int begin, int end){                           //递归实现
    31     if(begin == end){
    32         return;
    33     }
    34     
    35     int index = Partition(data, begin, end);
    36     if(index > begin){
    37         QuickSort(data, begin, index - 1);
    38     }
    39     if(end > index){
    40         QuickSort(data, index + 1, end);
    41     }
    42 }
    43 
    44 int main(){
    45     int num[] = {12, 3, 5, 9, 13, 0, 78, 11, 99, 23, 34, 8};                       //测试程序可行性
    46     int len = sizeof(num) / sizeof(int);
    47     
    48     QuickSort(num, 0, len);
    49     for(int i = 0; i < len; i++){
    50         cout<<num[i]<<' ';
    51     }
    52     
    53     return 0;
    54 }
  • 相关阅读:
    删除表
    删除表格的行或者列
    给word中的表格增加行或者列
    向word中插入表格
    设置图片的对齐方式
    day19作业
    Python入门day19——叠加多个装饰器、yield、三元表达式、生成式、函数的递归调用
    day18作业
    Python入门day18——有参装饰器
    Python入门day18——迭代器生成器
  • 原文地址:https://www.cnblogs.com/dormant/p/5317000.html
Copyright © 2020-2023  润新知