zoukankan      html  css  js  c++  java
  • 快速排序(交换排序的一种)

     1 // QuickSort.cpp : 定义控制台应用程序的入口点。
     2 //
     3 //快速排序采用分治策略,Devide-and-ConquerMethod
     4 
     5 #include "stdafx.h"
     6 #include "stdio.h"
     7 
     8 void QuickSort(int a[], int left, int right)
     9 {
    10     int i = left;
    11     int j = right;
    12     int base = a[left];
    13 
    14     if (left >= right)
    15     {
    16         return;
    17     }
    18 
    19     while (i != j)
    20     {
    21         //从后往前找,找到比base小的,赋值给i的位置
    22         while (i < j && a[j] >= base)
    23         {
    24             j--;
    25         }
    26         a[i] = a[j];
    27 
    28         //从前往后找,找到比base大的,赋值给j的位置
    29         while (i < j && a[i] <= base)
    30         {
    31             i++;
    32         }
    33         a[j] = a[i];
    34     }
    35     //插入基准数
    36     a[i] = base;
    37 
    38     //递归排列以基准数划分的前后两个数组
    39     QuickSort(a, left, i-1);
    40     QuickSort(a, i+1, right);
    41 }

    快速排序是不稳定的算法,它不满足稳定算法的定义:

    算法稳定性:假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面,并且排序之后,a[i]仍然在a[j]前面,则这个排序算法是稳定的。

    快速排序算法的时间复杂度在最坏情况下是O(N^2),平均的时间复杂度是O(N*logN)。

  • 相关阅读:
    XGBoost参数
    算法
    Python2 和Python3 的区别
    解决ubuntu上ifconfig没有eth0/ens33且无法上网的问题
    Ubuntu 忘记root user密码 关闭图形界面
    rabbitmq消息队列
    CMDB 数据加密 最终整合API验证+AES数据加密
    CMDB API验证
    使用Python生成ASCII字符画
    google 技巧
  • 原文地址:https://www.cnblogs.com/cinvzi/p/9393938.html
Copyright © 2011-2022 走看看