快速排序: 使用快速排序算法对数组进行排序
快速排序: 使用快速排序算法对数组进行排序
题目
一个数组有 N 个元素,使用快速排序对其进行排序输出(本题还会人工阅卷,请使用快速排序算法进行排序)
输入描述:
输入为两行。 第一行一个整数n(1 ≤ n ≤ 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。
输出描述:
输出一行,即排序之后的数组,以空格分隔,行末无空格
示列
输入
10 293 108 161 783 376 265 330 598 646 812
输出
108 161 265 293 330 376 598 646 783 812
练习地址
牛客网快速排序练习地址
解题代码
在牛客网的编译环境上有一个测试用例过不了,但是在本地编译,同样的测试用例就可以过,有时间再研究一下。
#include<iostream>
#include<vector>
using namespace std;void swap_two( int &first_number, int &second_number )
{int swap = first_number;first_number = second_number;second_number = swap;
}int quick_sort( vector<int> &vector_sort, int first_point, int last_point )
{if( first_point >= last_point ) //传进来的first_point 可能会大于 last_point,因为下面quick_sort( vector_sort, left_point + 1, last_point )return 0;int left_point = first_point + 1; // left_point赋值的时候 first_point + 1,防止quick_sort( vector_sort, first_point, left_point - 1 )时小于first_pointint right_point = last_point;int benchmark = first_point;while( left_point < right_point ){if( vector_sort[right_point] > vector_sort[benchmark] ) right_point--;else if( vector_sort[left_point] <= vector_sort[benchmark] ) left_point++;else swap_two(vector_sort[left_point], vector_sort[right_point]);}swap_two(vector_sort[left_point], vector_sort[benchmark]);quick_sort( vector_sort, first_point, left_point - 1 );quick_sort( vector_sort, left_point + 1, last_point );return 0;
}int main()
{int size = 0;cin >> size;int num;vector<int> quick_sort_v;quick_sort_v.reserve(size);do{cin >> num;quick_sort_v.push_back(num);} while (getchar() != '\n');for(auto i : quick_sort_v )cout << i << ' ';cout << endl;quick_sort(quick_sort_v, 0, quick_sort_v.size() - 1);for(auto i : quick_sort_v )cout << i << ' ';cout << endl;
}
快速排序: 使用快速排序算法对数组进行排序相关推荐
- java的数组查找算法_java数组、排序算法、查找算法详解
1.为什么定义数组要采用type[] arrayName;这种方式? 因为这种方式具有很好的可读性,使用这种方式很容易就可以理解这是定义一个变量,其中变量名是arrayName,变量的类型是type[ ...
- 归并排序算法实现数组的排序
需求: 排序前{8,4,5,7,1,3,6,2} 排序后{1,2,3,4,5,6,7,8,} 排序原理: 1. 将数据分为{8,4,5,7},{1,3,6,2}两组. 2. 将每组在细分为{8,4}, ...
- 算法:六种比较排序算法
本文是本人读过<算法导论>之后所写,C代码实现是我尽量参照伪代码所写,如有错误,敬请指正. *:所有排序算法默认从小到大排序,伪代码数组的首元素为A[1], 数组长度为n 一.冒泡排序 冒 ...
- 数据结构和算法系列5 七大排序之冒泡排序和快速排序
排序是我们生活中经常会面对的问题.同学们做操时会按照从矮到高排列:老师查看上课出勤情况时,会按学生学号顺序点名:高考录取时,会按成绩总分降序依次录取等.排序是数据处理中经常使用的一种重要的运算,它在我 ...
- 9个元素换6次达到排序序列_(算法四)高级排序(快速排序)
1.快速排序 快速排序是对冒泡排序的一种改进.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速 ...
- 数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并
数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并 第一章 冒泡排序 [1]Bubble_Sort.c 第二章 快速排序 [1]quick_sort.c 第三章 大数据 ...
- Java 实现快速排序法对数组进行排序
快速排序是对冒泡排序的一种改进,其排序速度相对较快. 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按照这个方法对这两部分数据分别 ...
- 冒泡和快速排序的时间复杂度_十大经典排序算法——快速排序
目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面. 不稳定:如果a原本在b的前面,而a ...
- 排序算法的实现。用C语言编程实现冒泡排序、选择排序、插入排序、shell排序、快速排序、堆排序算法、归并排序。利用随机函数产生N个随机整数(10000以上)。
#include<stdio.h> #include <time.h> #include<stdlib.h> #define N 10000 double T, T ...
最新文章
- [Django](1093, quot;You can#39;t specify target table #39;fee_details_invoices#39; for update in...
- R语言可视化包ggplot2包通过因子变量设置图像颜色实战
- 《MySQL DBA修炼之道》——2.3 其他MySQL分支的安装
- Reporting Services 安装的备份和还原操作
- mongodb php代码实例,MongoDB文档的更新(php代码实例)
- 中兴5250交换机配置手册_TSN工业交换机中文说明
- C 语言实例 - 使用结构体(struct)
- springBoot JPA 数据库字段(实体类)带下划线在扩展findBy方法时出错的解决办法
- hdu 5437 Alisha’s Party 优先队列
- Linux内核IP Queue机制的分析
- 使用QT连接access数据库详解(清晰、透彻)
- 什么是Photoshop中的图层和蒙版?
- Windows 中包括的 USB 设备类驱动程序
- 物联网LoRa系列-13:无线电磁波概述以及核心概念的澄清(速度、频率、周期、波长、幅度、功率、相位、干涉)
- 银联的bankall_Visa禁止银行利用中国银联(China UnionPay Co.)境外交易
- 【论文阅读】Regional Semantic Contrast and Aggregation for Weakly Supervised Semantic Segmentation
- C++课程设计 STL通讯录管理系统
- SolidKits增效设计工具集——装配体标准件自动统计解决方案
- 大数据平台搭建 | Hive
- 山东理工大学计算机学院社团联合会,山东理工大学——计算机科学与技术学院开展“十年之约·毕业班会”...