快速排序算法 — C++实现

news/2024/5/19 23:23:50 标签: 算法, 排序算法, 快速排序, C++

快速排序

通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的记录的关键字小,然后分别对这两部分记录继续按照这一过程排序

算法过程

  1. 先设定一个分界值(枢纽/哨兵),通过该值将数组分为左右两个部分
  2. 将小于分界值的放左边,将大于分界值的放右边
  3. 然后对左边和右边重复12的排序过程,直至数组不可分,则整个数组达到有序状体

算法评价

  • 算法的时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)
  • 其是一种不稳定的算法,是对冒泡排序的一种改进

算法实现

源代码:

#include <iostream>
using namespace std;
void swap(int *arr,int low,int high){
    int tmp;
    tmp=arr[low];
    arr[low]=arr[high];
    arr[high]=tmp;
}
int partition(int *arr,int low,int high){
    int piv;
    piv=arr[low];
    while(low<high){
        while(low<high&&arr[high]>piv)high--;
        swap(arr,low,high);
        while(low<high&&arr[low]<piv)low++;
        swap(arr,low,high);
    }
    return low;
}
void qsort(int *arr,int low,int high){
    int piv;
    if(low<high){
        piv=partition(arr,low,high);
        qsort(arr,low,piv-1);
        qsort(arr,piv+1,high);
    }
}
void quicksort(int *arr,int len){
    qsort(arr,0,len);
}
int main(){
    int arr[]={9,1,5,8,3,7,4,6,2},len=9;
    cout<<"排序前顺序:"<<endl;
    for(int i=0;i<9;i++)cout<<arr[i];
    quicksort(arr,len-1);
    cout<<"\n排序后顺序:"<<endl;
    for(int i=0;i<9;i++)cout<<arr[i];
    return 0;
}

运行结果:

排序前顺序:
915837462
排序后顺序:
123456789

http://www.niftyadmin.cn/n/1233366.html

相关文章

梯度与Roberts、Prewitt、Sobel、Lapacian算子

学习心得&#xff1a; 学习图像处理的过程中&#xff0c;刚开始遇到图像梯度和一些算子的概念&#xff0c;这两者到底是什么关系&#xff0c;又有什么不同&#xff0c;一直困扰着我。后来在看到图像分割这一模块后才恍然大悟&#xff0c;其实图像的梯度可以用一阶导数和二阶偏…

战术遮挡 — Python实现

题目描述 人的视力不能看到掩体之后的事物&#xff0c;在一场战争中&#xff0c;我们希望对方尽可能的低估我方的战斗力这样才能出其不意。 某个军事参谋效仿孙膑&#xff0c;把某些小规模队隐藏在大规模部队中&#xff0c;这样&#xff0c;就使得军队数量看起来变少了。已知…

Googlenet v1、v2、v3、v4区别

Googlenet v1、v2、v3、v4区别 Inception v1的网络&#xff0c;将1x1&#xff0c;3x3&#xff0c;5x5的conv和3x3的pooling&#xff0c;stack在一起&#xff0c;一方面增加了网络的width&#xff0c;另一方面增加了网络对尺度的适应性&#xff1b; v2的网络在v1的基础上&#x…

反序数字 — Python实现

题目描述 秘密电报由数字和空格组成&#xff0c;破解密电前需要获取完整的数字电报&#xff0c;将电报里的数字反序同时还需要去除掉多余的空格(子串之间只保留1个空格&#xff0c;其余均算作多余空格) 如” 1 5721 23”需要反序成 "23 5721 1 ” 输入描述 带空格分隔的…

TensorFlow实现对图像的预处理

图像翻转 tf.image.flip_up_down&#xff1a;上下翻转 tf.image.flip_left_right&#xff1a;左右翻转 tf.image.transpose_image&#xff1a;对角线翻转 除此之外&#xff0c;TensorFlow还提供了随机翻转的函数&#xff0c;保证了样本的样本的随机性&#xff1a; tf.image…

回文数判断 — Python实现

题目描述 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false LeetCode链接 解题思路 使用python解决非常简单 首先将数…

人脸检测深度方法

深度学习在计算机视觉的应用中已经十分广泛&#xff0c;其效果相比于传统方法也有很大的提高。本文就人脸检测这个领域&#xff0c;介绍深度学习在人脸检测领域的发展。深度学习人脸检测最早的代表作之一是2015年CVPR的一篇论文《A Convolutional Neural Network Cascade for F…

next数组如何求解

next数组示例 我们先来看两个next数组的例子 示例1 j123456模式串abcdexnext[j]011111 示例2 j123456模式串abcabxnext[j]011123 求解方式 初始next[1]0&#xff0c;next[1]1j逐步递增&#xff0c;在由j前面的字符组成的子串中进行查找&#xff0c;计算next[j]的规则为&am…