桶式排序法的C++实现
来源:互联网 发布:pc蛋蛋app源码 编辑:程序博客网 时间:2024/06/05 07:34
桶式排序
桶式排序适用于那些数组中的元素为有界的情况,比如说以下算法中元素的界限为0~max
桶式排序是通过一个计数器数组来存储待排序数组中每个元素值的个数,然后通过累加计数器中的值,分别得出每种元素值的最末位置
最后通过元素的位置将元素放到数组中即可,从后往前放是为了保持算法的稳定性
桶式排序的时间代价为O(max+n),空间代价为O(max)
桶式排序适用于那些数组中的元素为有界的情况,比如说以下算法中元素的界限为0~max
桶式排序是通过一个计数器数组来存储待排序数组中每个元素值的个数,然后通过累加计数器中的值,分别得出每种元素值的最末位置
最后通过元素的位置将元素放到数组中即可,从后往前放是为了保持算法的稳定性
桶式排序的时间代价为O(max+n),空间代价为O(max)
#ifndef BUCKETSORT_H#define BUCKERSORT_H#include <iostream>template<typename T>class BucketSort{public:void bucketSort( T *,int,int );void printArr( T *,int );};/***桶式排序法*/template<typename T> void BucketSort<T>::bucketSort( T *sortedArr,int arrLength,int max ){int *count=new int[max+1];T *temp=new T[arrLength];for( int i=0;i<max+1;++i )count[i]=0;/***对相同的值计数*/for( int i=0;i<arrLength;++i ){++count[ sortedArr[i] ];temp[i]=sortedArr[i];}/***求出累加和*/for( int i=1;i<max+1;++i )count[i]+=count[i-1];/***此处--count[ temp[i] ]不仅仅求出了temp[i]应该存放的位置,而且对象的计数值减了1,使得求出了temp[i]应该在的位置*此处从arrLength-1开始是为了稳定性*/for( int i=arrLength-1;i>=0;--i )sortedArr[ --count[ temp[i] ] ]=temp[i];delete [] count;delete [] temp;}template<typename T> void BucketSort<T>::printArr( T *sortedArr,int arrLength ){for( int i=0;i<arrLength;++i ){std::cout<<sortedArr[i]<<" ";}}#endif
- C实现的排序
- 选择排序与冒泡法排序的C代码实现
- 选择排序与冒泡法排序的C代码实现
- 堆排序的C实现
- 插入排序的c实现
- 选择排序的c实现
- shell排序的c实现
- 快速排序的c实现
- 快速排序的c实现
- c实现的各种排序
- 堆排序的实现(c++)
- 桶式排序法的C++实现
- C语言桶排序实现
- C插入排序法实现
- 【C语言】冒泡法排序的三种实现方法
- 基本排序算法的C语言实现
- C链表 插入排序的实现
- 各种排序方法的C语言实现
- 展讯平台 脚本 ANDROID_3RDPARTY_IMAGE_TAG 和 ANDROID_3RDPARTY_SELECTED_PRODUCT 两个变量的位置(追踪)
- 智能家居安防报警联动系统应用分析
- maven2常用命令
- link_to和页面跳转
- WebP android
- 桶式排序法的C++实现
- synchronized方法和synchronized块
- 怎样拟定网站推广企划的操作步骤
- [ExtNet] GridPanel怎么实现服务器端分页、排序、查询?--Oracel存储过程分页
- svn详细配置
- 在存储过程中输入输出游标
- poi的导出excel(直接下载)
- compile module with freescale LTIB
- C++ Primer笔记(3)