算法学习之路(2)——快速排序

快速排序的基本思想:
  1)对任意给定的序列中元素Rs(关键字为Ks),经过一趟排序后,将原序列分割成两个子序列:
  2)前一个子序列中的所有元素的关键字均小于等于Ks ,
  3)后一个子序列中元素的关键字均大于等于Ks。
  4)称元素Rs 为分割元素
  5)以后只需对2个子序列分别以同样的算法进行快速排序,直到子序列为空或只有一个元素时得到有序序列。
  算法可以用递归来实现。

  a)  i从左向右找第1个大于等于分割元素的元素。
  b)  j从右向左找第1个小于或等于分割元素的元素。
  c)  i<j时,a[i]、a[j]交换;继续扫描,当i>=j时,此趟排序结束
  本质上:大的元素调整到右边,小的元素调整到左边

算法实现:

(1)定义一个快排函数quicksort;

函数声明:

  void quicksort(int* source,int left,int right);

  @param source 源数组

  @param left 数组起始索引

  @param right 数组末端索引

函数实现:

  

void quicksort(int* source,int left,int right){
    if(left<right){
        int i = left;
        int j = right + 1; //A[left]为分割元素
        do{
            do{
                i++;
             }while(source[left]>source[i]);//i从左向右找第1个大于或等于分割元素的元素
            do{
                j--;
            }while(source[left]<source[j]);//j从右向左找第1个小于或等于分割元素的元素
            if(i<j){
                swap(source[i],source[j]);
            }
        }while(i<j);//i<j时,继续扫描,i>=j时,此趟排序结束
        swap(source[left],source[j]);
        quicksort(source,left,j-1);//对分割元素左端序列快速排序
        quicksort(source,j+1,right);//对分割元素右端序列快速排序
    }
}

(2)调用quicksort

函数声明:

  void quicksort(int* source,int length);

  @param source 源数组

  @param length 数组长度

函数实现:

  

void quicksort(int* source,int length){
    quicksort(source,0,length-1);
}

实验

测试代码:

int main(){
    int* a = new int[20]{ 1, 5, 2, 3, 6, 43, 7, 2, 7, 5, 87, 65, 32, 45, 12, 64, 31, 33, 22, 6 };
    quicksort(a,20);
    for (int i = 0; i < 20; i++){
        cout << a[i] << " ";
    }
}

实验结果:

时间: 2024-10-27 13:53:02

算法学习之路(2)——快速排序的相关文章

我的算法学习之路

关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门--当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾--反正最后考试划个重点也能过,于是这门整个计算机专业本

Peng Gong:我的算法学习之路

原文出处: Lucida (@peng_gong) 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门--当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾--

大神的算法学习之路

http://zh.lucida.me/ 大神的算法学习之路,布布扣,bubuko.com

转----我的算法学习之路

我的算法学习之路 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 原文链接:http://zh.lucida.me/blog/on-learning-algorithms/ 原文作者:Lucida 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程

一位Google程序员的算法学习之路(转)

关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门——当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾——反正最后考试划个重点也能过,于是这门整个计算机专业本

[收藏]我的算法学习之路

转自:http://zh.lucida.me/blog/on-learning-algorithms/ 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 原文链接:http://zh.lucida.me/blog/on-learning-algorithms/ 原文作者:Lucida 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的

一个谷歌程序员的算法学习之路

原文出处: Lucida (@peng_gong) 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门——当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾——

数据结构与算法学习之路:背包问题的贪心算法和动态规划算法

一.背包问题描述: 有N种物品和一个重量为M的背包,第i种物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包重量,且价值总和最大. 二.解决方法: 1.贪心算法:贪心算法基于的思想是每一次选择都作当前最好的选择,这样最后的结果虽然不一定是最优解,但是也不会比最优解差很多. 举个例子说明可能好懂一些:一帮基友去聚餐,菜是一份一份上的,我每一次夹菜都只夹牛肉/海鲜吃,可能到最后我吃的牛肉/海鲜很多,但不一定代表我吃掉的东西的总价值最高,但是相对来说价值也很高

&lt;2014 05 09&gt; Lucida:我的算法学习之路

[转载] 我的算法学习之路 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 如果你使用的是手机或平板设备,那么请点击下面的链接以获得更好的阅读效果: http://zh.lucida.me/blog/on-learning-algorithms/ 原文作者:Lucida 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教

我的算法学习之路(转载)

关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 如果你使用的是手机或平板设备,那么请点击下面的链接以获得更好的阅读效果: http://zh.lucida.me/blog/on-learning-algorithms/ 原文作者:Lucida 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学