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; }
查看全文
相关阅读:
JOISC2017 手持ち花火 (Sparklers) 题解
Codeforces 1427E. Xum 题解
AGC027D
Codeforces 1416F. Showing Off 题解
AGC032F
AGC019E
TCP实验(前言)
OS第一次实验截图
第12组 Beta (2/6)(丁泽中)
第12组 Beta (1/6)(丁泽中)
原文地址:https://www.cnblogs.com/windmissing/p/2559796.html
最新文章
线段树合并
NOI2008 志愿者招募
CF1146H Satanic Panic
AGC002F Leftmost Ball
HNOI2011 卡农
HAOI2008 圆上的整点
HIT暑期集训 数论进阶
HIT暑期集训 状压与优化DP
HIT暑期集训 网络流建图
HIT暑期集训 第四周周测
热门文章
HIT暑期集训 数位DP与概率DP
HIT暑期集训 lca与rmq
HIT暑期集训 计算几何基础二
HIT暑期集训 计算几何基础
HIT暑期集训 区间DP,树形DP
HIT第三周 周测补题
洛谷P6789 寒妖王 题解
第13回日本情報オリンピック 本選 D
第13回日本情報オリンピック 本選 E
洛谷P5362 [SDOI2019]连续子序列 题解
Copyright © 2011-2022 走看看