c++实现几种常见排序算法
一、快速排序
int getPivot(vector<int>& arr, int left, int right){
int tmp = arr[left];
while(left < right){
while(left < right && arr[right] >= tmp){
right --;
}
arr[left] = arr[right];
while(left < right && arr[left] <= tmp){
left ++;
}
arr[right] = arr[left];
}
arr[left] = tmp;
return left;
}
void quickSort(vector<int>& arr, int left, int right){
if(left < right){
int pivot = getPivot(arr, left, right);
quickSort(arr,left, pivot - 1);
quickSort(arr, pivot + 1, right);
}
}
二、冒泡排序
void bubbleSort(vector<int>& arr){
int size = arr.size();
for(int i = 1; i < size; i++){
for(int j = 0; j < size - i; j++){
if(arr[j] > arr[j + 1]){
swap(arr[j], arr[j + 1]);
}
}
}
}
三、堆排序
void adjustHeap(vector<int>& arr, int start, int end){
int parent = start;
int child = start*2 + 1;
while(child <= end){
if(child + 1 <= end && arr[child] < arr[child + 1] ){
child++;
}
if(arr[parent] > arr[child]){
return;
}
swap(arr[parent], arr[child]);
parent = child;
child = child * 2 + 1;
}
}
void heapSort(vector<int>& arr){
int size = arr.size();
for(int i = size/2 - 1; i >= 0; i--){
adjustHeap(arr, i, size - 1);
}
for(int i = size - 1; i >= 0; i--){
swap(arr[0], arr[i]);
adjustHeap(arr, 0, i - 1);
}
}
四、归并排序
void merge(vector<int>& arr, int left, int mid, int right){
vector<int> tmp;
int i = left, j = mid + 1;
while(i <= mid && j <= right){
if(arr[i] < arr[j]){
tmp.emplace_back(arr[i++]);
}else{
tmp.emplace_back(arr[j++]);
}
}
while(i <= mid){
tmp.emplace_back(arr[i++]);
}
while(j <= right){
tmp.emplace_back(arr[j++]);
}
int m = left;
int n = 0;
while(m <= right){
arr[m++] = tmp[n++];
}
}
void mergeSort(vector<int>& arr, int left, int right){
if(left >= right) return;
int mid = left + ((right - left) >> 1);
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
c++实现几种常见排序算法的更多相关文章
- JavaScript版几种常见排序算法
今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...
- Java中几种常见排序算法
日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数 ...
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列. 稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关 ...
- 几种常见排序算法的java实现
一.几种常见的排序算法性能比較 排序算法 最好时间 平均时间 最坏时间 辅助内存 稳定性 备注 简单选择排序 O(n^2) O(n^2) O(n^2) O(1) 不稳定 n小时较好 直接插入排序 O( ...
- Java的几种常见排序算法
一.所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法.排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面. ...
- 几种常见排序算法的基本介绍,性能分析,和c语言实现
本文介绍6种常见的排序算法,以及他们的原理,性能分析和c语言实现: 为了能够条理清楚,本文所有的算法和解释全部按照升序排序进行 首先准备一个元素无序的数组arr[],数组的长度为length,一个交换 ...
- 几种常见排序算法的C++描述
基本的排序算法有如下特点: 1.几种容易的算法都是以O(N2)排序的 2.Shell排序编程简单,其也是以O(N2)排序的,在实践中用的很多 3.复杂的排序算法往往都是按照O(NlogN)尽心排序的 ...
- php几种常见排序算法
<?php //从时间上来看,快速排序和归并排序在时间上比较有优势,//但是也比不上sort排序,归并排序比较占用内存! $arr = [4,6,1,2,3,89,56,34,56,23,65] ...
- 【知了堂学习笔记】java 编写几种常见排序算法2
排序的分类: 1.直接选择排序 它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~ ...
- 【知了堂学习笔记】java 编写几种常见排序算法
排序的分类: 一.交换排序 所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动. 1.冒泡 ...
随机推荐
- 流式查询1. mybatis的游标Cursor,分页大数据查询
流式查询流式查询 指的是查询成功后不是返回一个集合而是返回一个迭代器,应用可以通过迭代器每次取一条查询结果.流式查询的好处是能够降低内存使用.例如我们想要从数据库取 1000 万条记录而又没有足够的内 ...
- PowerBuilder编程新思维10.5:外传2(PowerPlume下一代开发解决方案)
万里归来年愈少 PB编程新思维10.5:外传2(PowerPlume下一代解决方案) 前言 今天我们就来盘点一下,PB下一代开发的所有技术可能性.所谓下一代开发技术,就是指脱离或半脱离PBVM的应用开 ...
- Python elasticsearch-py类库基础用法
实践环境 https://pypi.org/project/elasticsearch/ pip install elasticsearch==7.6.0 离线安装包及依赖包下载地址: https:/ ...
- Linux 备份命令 fsarchiver 基础使用教程
1 安装配置 fsarchiver 使用yum安装[二者选一个即可,我使用的是下面那个]: yum install https://dl.fedoraproject.org/pub/epel/epel ...
- 硬件开发笔记(二十九):TPS54331电源设计(二):12V转3.3V和12V转4V原理图设计
前言 电源供电电路设计很重要,为了更好的给对硬件设计有需求的人,特意将电源设计的基础过程描述出来. 紧接前一篇12V转5V的,本篇设计常用的12V转3.3V电路,不常用的12V转4V电路. ...
- 【Mybatis-Plus】联表分页查询实现
参考文章: https://blog.csdn.net/weixin_43847283/article/details/125822614 上上周写的SQL案例确实可以重构,所以搬到Demo里面测试看 ...
- 【Java】 Void 类型
void 也算一个类型,而且是基本数据类型 和其它数据类型一样提供了对应的包装类Void 每个包装类都提供一个TYPE字节实例,返回对应的原型类实例 public static void main(S ...
- 【Java】项目采用的设计模式案例
先说一下业务需要: 做电竞酒店后台系统,第一期功能有一个服务申请的消息通知功能 就是酒店用户在小程序点击服务功能,可以在后台这边查到用户的服务需要 原本设计是只需要一张表存储这些消息,但是考虑设计是S ...
- 如何计算两个正太分布的KL散度 —— 正太分布的KL散度 (Kullback-Leibler divergence) 计算
参考: https://blog.csdn.net/int_main_Roland/article/details/124650909 给出实现代码: def get_kl(): mean0, log ...
- 作为国产深度学习框架中分布式计算特性最强大的OneFlow的最大缺点是什么?
OneFlow是国产深度学习框架中分布式计算特性最强大的,因为其原生支持分布式特性,世界上的历史中的深度学习框架唯一可以做到这一点的也就只有Google的TensorFlow和Jax了,虽然有人说Go ...