zoukankan
html css js c++ java
算法导论8.34
题目:
如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序
思路:
把整数转换为n进制再排序
代码:
#include <iostream> #include <cmath> using namespace std; int n, radix, length_A, digit = 2; void Print(int *A, int start, int end) { int i; for(i = start; i <= end; i++) { if(i == start)cout<<'{'; else cout<<' '; cout<<A[i]; } cout<<'}'<<endl; } //基数排序调用的稳定排序 void Stable_Sort(int *A, int *B, int k, int d) { int i, j; //将C数组初始化为0,用于计数 int *C = new int[k+1]; for(i = 0; i <= k; i++) C[i] = 0; int *D = new int[length_A+1]; for(j = 1; j <= length_A; j++) { //D[j]表示第[j]个元素的第i位数字 D[j] = A[j] % (int)pow(radix*1.0, d) / (int)pow(radix*1.0, d-1); //C[j]表示数字D[j]在数组A中出现的次数 C[D[j]]++; } //C[i]表示所以<=i的数字出现过的次数 for(i = 1; i <= k; i++) C[i] = C[i] + C[i-1]; //初始化B为0,B用于输出排序结果 for(i = 1; i <= length_A; i++) B[i] = 0; for(j = length_A; j >= 1; j--) { //如果<=D[j]的数字的个数是x,那么排序后A[j]应该出现在第x个位置,即B[x]=A[j] B[C[D[j]]] = A[j]; C[D[j]]--; } delete []C; delete []D; } //基数排序 void Radix_Sort(int *A, int *B) { int i, j; //依次对每一位进行排序,从低位到高位 for(i = 1; i <= digit; i++) { Stable_Sort(A, B, radix-1, i); //输入的是A,输出的是B,再次排序时要把输出数据放入输出数据中 for(j = 1; j <= length_A; j++) A[j] = B[j]; } } int main() { cin>>n; length_A = n; int *A = new int[n+1]; int *B = new int[n+1]; bool flag[1000] = {0}; int i; //生产n个随机的数据范围在0到n^-1之间 for(i = 1; i <= n; i++) { do { A[i] = rand() % (n*n); }while(flag[A[i]]); flag[A[i]] = 1; } Print(A, 1, n); radix = n; Radix_Sort(A, B); Print(A, 1, n); return 0; }
查看全文
相关阅读:
Angel investor
[HNOI 2003]消防局的设立
[USACO 08JAN]Telephone Lines
[Luogu 2265]路边的水沟
[NOI 2010]航空管制
[HNOI 2004]敲砖块
[Luogu 1730]最小密度路径
[USACO 13NOV]No Change
[POJ 1006]生理周期
[AHOI 2012]树屋阶梯
原文地址:https://www.cnblogs.com/windmissing/p/2559796.html
最新文章
odoo 获取IP地址
ifconfig
VirtualBox 原始镜像转换成 vdi 镜像
以命令行界面启动 Ubuntu
Openstack Swift 创建用户和 container
Cannot find libcrypto in Ubuntu
Ubuntu 修改 hosts 文件
Makefile 简要辅导 【转载】
Makefile 中引用多个 include 路径
Makefile 头文件 <> 与 "" 的差别,与 Visual Studio 不同
热门文章
tagbar 调到函数定义再跳回
1、Task类构造函数
C#异步编程的实现方式(4)——Task任务
GetListToJson
杠杆(leverage)就是支付保证金借钱进行交易,以小博大
大调整是什么?
我们做产品,不是为了热闹,也不是为了赚钱,要设身处地为你的用户想,才有生命力
MySQL乱码问题以及utf8mb4字符集---utf8mb4和utf8有什么区别? emoji表情与utf8mb4
中国最大的融资平台
创业土壤,从来不是童话里的乌托邦,相反,它充满了残酷、血腥,背叛
Copyright © 2011-2022 走看看