美文网首页
算法复习-交换类排序(2)-快速排序

算法复习-交换类排序(2)-快速排序

作者: 桔子满地 | 来源:发表于2018-06-20 11:03 被阅读0次

快速排序

快速排序通过多次划分操作实现排序。
以升序为例,每趟选择当前所有子序列中的一个关键字(通常是第一个)作为枢纽,将子序列中比枢纽小的移到枢纽前面,比枢纽大的移到枢纽后面;当本趟所有子序列都被枢纽以上述规则划分后会得到新的一组更短的子序列,它们成为下一趟划分的初始序列集。

代码:

#include <iostream>
using namespace std;

void print_array(int array[], int n) {
  for (int i = 0; i < n; ++i)
    cout<<array[i]<<" ";
  cout<<endl;
}

void QuickSort_array(int array[], int low, int high) {
  int i, j, temp, compare;
  i = low;
  j = high;
  compare = array[i];

  if (low < high) {
    while (i < j) {
      while (j > i && array[j] >= compare)
        --j;
    
      if (i < j){
        array[i] = array[j];
        ++i;
      }

      while(i < j && array[i] < compare)
        ++i;

      if (i < j) {
        array[j] = array[i];
        --j;
      }
    }

    array[i] = compare;

    QuickSort_array(array, low, i - 1);
    QuickSort_array(array, i + 1, high);
  }
}

void QuickSort(int array[], int n) {
  QuickSort_array(array, 0, n - 1);
}

int main() {
  int array[] = {1, 5, 3, 6, 2, 9, 4};
  print_array(array, 7);
  QuickSort(array, 7);
  print_array(array, 7);
  
  return 0;
}

复杂度分析:

1. 时间复杂度
快速排序最好情况下的时间复杂度为O(nlog2^n),待排序列越接近无序,本算法效率越高。 最坏情况下的时间复杂度为O(n2),待排序列越接近有序,本算法效率越低。平均情况下时间复杂度为O(nlog2^n)。快速排序的排序趟数和初始序列有关。
说明:还有多个时间复杂度为O(nlog2^n)的排序,但仅本算法叫做快速排序,因为这些算法的基本操作执行次数的多项式最高次项为XO(nlog2^n)(x为系数),快速排序的x最小,可见它在同级别的算法中是最好的,因此叫快速排序。*

2. 空间复杂度
快速排序的空间复杂度是O(log2^n)。快速排序是递归进行的,递归需要栈的辅助,因此它需要的辅助空间比前面几类排序算法大。

相关文章

  • 经典算法---排序(摘抄)

    一、排序算法 前言:常见排序算法分类 非线性时间比较类排序:交换类排序(快速排序和冒泡排序)、插入类排序(简单插入...

  • 算法复习-交换类排序(2)-快速排序

    快速排序 快速排序通过多次划分操作实现排序。以升序为例,每趟选择当前所有子序列中的一个关键字(通常是第一个)作为枢...

  • 排序算法时间复杂度、空间复杂度、稳定性比较

    一、排序算法的分类 1.插入类排序直接插入排序,折半插入排序,希尔排序2.交换类排序冒泡排序,快速排序3.选择类排...

  • (1)基本算法

    三大类 1、交换排序算法 冒泡(数据量小)-> 快速2、插入 类排序3、选择 类排序 求和 1-1/2+1/3...

  • 排序算法

    排序算法 非线性时间比较类排序 交换排序 冒泡排序 快速排序 插入排序 插入排序 希尔排序 选择排序 简单选择排序...

  • 交换类排序算法-冒泡排序、快速排序

    交换类排序 1.冒泡排序 2.快速排序 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用...

  • java--快速排序

    1:基本思想: 快速排序是属于交换类排序,采用不断的比较和移动来实现排序。快速排序是一种非常高效的排序算法,它的实...

  • 看图说话排序算法之快速排序

    本文着重介绍快速排序算法(quick sort),快速排序和冒泡排序一样是交换排序的一种,快速排序算法可以看成是对...

  • 基础算法|快速排序

    快速排序(Quicksort),是对冒泡排序算法的一种改进。 快速排序算法通过多次比较和交换来实现排序,其排序流程...

  • Java学习记录(常用 算法 排序 )

    排序算法的分类如下: 1.插入排序(直接插入排序、折半插入排序、希尔排序);2.交换排序(冒泡泡排序、快速排序);...

网友评论

      本文标题:算法复习-交换类排序(2)-快速排序

      本文链接:https://www.haomeiwen.com/subject/hmutyftx.html