基数排序
来源:互联网 发布:krpano100源码 授权码 编辑:程序博客网 时间:2024/06/07 02:52
基数排序(radix sort)
- 真言
宿舍很冷,但是为了将来,什么苦都得忍着,忍方可成大事。
- 主题
给一堆相同具有相同位数的数排序。这些数有一个共同的特点具有相同的位数。
- 思路
举个例子呗,例子最好理解了。
比如有如下数据,{329,457,657,839,436,720,355}.这些数字都是三位的,也就是具有相同的位数。
我们知道,对于一位数字只能是从0~9里的一个,一共有十种可能,对于单位的数字我们可以用长度为十的哈希表(开放地址的链表)去存储数据,这样我们的数据就可以存起来了。
算法演示过程
时间复杂度(n*m),n为数据量,m为数字的位数。
- 实验
程序结果截图
- 代码(只供参考)
代码一年前写的,很水。。。
data.txt- 329/457/657/839/436/720/355/
329/457/657/839/436/720/355/
test.cpp
- #include <iostream>
- #include <fstream>
- #include <math.h>
- using namespace std ;
-
-
- int const size = 7;
- int const bit = 3 ;
-
- class radix_sort
- {
- int Aint ;
-
- public:
- // function:构造函数;
- radix_sort(void);
- // function:get data from file;
- void dataReader();
- // function:sort the data;
- void sort();
- // function:show the data;
- void datashow();
- // line is the line num;
- void tableinert(int (&T)[10][size],int line,int data);
- // function: save data out to file;
- void datasave();
- // function:析构函数;
- ~radix_sort(void);
- };
-
-
- // function:构造函数;
- radix_sort::radix_sort(void)
- {
- Aint = new int[size] ;
-
- }
-
- // function:get data from file;
- void radix_sort::dataReader()
- {
- ifstream fileReader ;
- fileReader.open(”data.txt”);
-
- int i= 0 ;
- char c;
- while(i<size)
- {
- fileReader>>Aint[i]>>c;
- i++;
- }
-
- cout<<”read over ”<<endl;
- fileReader.close();
- }
-
- // function:sort the data;
- void radix_sort::sort()
- {
- int table[10][size] ;
- int i,j ;
- for(i = 0 ;i<10;i++)
- for(j = 0 ; j<size;j++)
- {
- // mark null
- table[i][j] = -1;
- }
-
-
-
- j=1;
- int mod ;
- int k;
- int num ;
- while(j<bit+1)
- {
- //the data is saved to table;
- for( i = 0 ;i< size;i++ )
- {
- mod = Aint[i]%int ( pow(10.0,j) ) ;
- mod = mod /int ( pow(10.0,j-1) ) ;
- // var mode : get the bit;
- this->tableinert(table,mod,Aint[i]);
- }
-
- i = 0 ;
- // use time to get space;
- // table is saved to Aint;
- for( k = 0; k<10;k++)
- {
- num = 0;
- while(table[k][num] != -1)
- {
- Aint[i++]=table[k][num] ;
- table[k][num] = -1 ;
- num++;
- }
- }
- cout<<”the first time:”<<endl;
- this->datashow();
- if(i!= size)
- {
- cout<<”error”<<endl;
- }
-
- j++;
- }
-
- }
-
- // function:show the data;
- void radix_sort::datashow()
- {
- int i =0 ;
- cout<<”data follows”<<endl;
- while(i<size)
- {
- cout<<Aint[i]<<endl;
- i++ ;
- }
- cout<<”show over”<<endl;
- }
-
-
- // line is the line num;
- void radix_sort::tableinert(int (& T)[10][size],int line,int data)
- {
- int i = 0 ;
- while(i<size)
- {
- // if now space is NULL, so put it in
- if(T[line][i] == -1 )
- {
- T[line][i] = data;
- break;
- }
- i++;
- }
- }
-
-
- // function: save data out to file;
- void radix_sort::datasave()
- {
- ofstream fileWriter;
- fileWriter.open(”sorteddata.txt”);
- fileWriter.clear();
-
- int i = 0;
- while(i<size)
- {
- fileWriter<<Aint[i]<<”/”;
- i++;
- }
- cout<<”save over”<<endl;
- fileWriter.close();
-
-
- }
-
- // function:析构函数;
- radix_sort::~radix_sort(void)
- {
- delete [] Aint ;
- }
-
- int main()
- {
- radix_sort RS = new radix_sort() ;
- RS->dataReader();
- RS->datashow();
- RS->sort();
- RS->datasave();
-
- delete RS ;
- system(”pause”);
- return 0;
- }
- 329/457/657/839/436/720/355/
329/457/657/839/436/720/355/
test.cpp
- #include <iostream>
- #include <fstream>
- #include <math.h>
- using namespace std ;
- int const size = 7;
- int const bit = 3 ;
- class radix_sort
- {
- int Aint ;
- public:
- // function:构造函数;
- radix_sort(void);
- // function:get data from file;
- void dataReader();
- // function:sort the data;
- void sort();
- // function:show the data;
- void datashow();
- // line is the line num;
- void tableinert(int (&T)[10][size],int line,int data);
- // function: save data out to file;
- void datasave();
- // function:析构函数;
- ~radix_sort(void);
- };
- // function:构造函数;
- radix_sort::radix_sort(void)
- {
- Aint = new int[size] ;
- }
- // function:get data from file;
- void radix_sort::dataReader()
- {
- ifstream fileReader ;
- fileReader.open(”data.txt”);
- int i= 0 ;
- char c;
- while(i<size)
- {
- fileReader>>Aint[i]>>c;
- i++;
- }
- cout<<”read over ”<<endl;
- fileReader.close();
- }
- // function:sort the data;
- void radix_sort::sort()
- {
- int table[10][size] ;
- int i,j ;
- for(i = 0 ;i<10;i++)
- for(j = 0 ; j<size;j++)
- {
- // mark null
- table[i][j] = -1;
- }
- j=1;
- int mod ;
- int k;
- int num ;
- while(j<bit+1)
- {
- //the data is saved to table;
- for( i = 0 ;i< size;i++ )
- {
- mod = Aint[i]%int ( pow(10.0,j) ) ;
- mod = mod /int ( pow(10.0,j-1) ) ;
- // var mode : get the bit;
- this->tableinert(table,mod,Aint[i]);
- }
- i = 0 ;
- // use time to get space;
- // table is saved to Aint;
- for( k = 0; k<10;k++)
- {
- num = 0;
- while(table[k][num] != -1)
- {
- Aint[i++]=table[k][num] ;
- table[k][num] = -1 ;
- num++;
- }
- }
- cout<<”the first time:”<<endl;
- this->datashow();
- if(i!= size)
- {
- cout<<”error”<<endl;
- }
- j++;
- }
- }
- // function:show the data;
- void radix_sort::datashow()
- {
- int i =0 ;
- cout<<”data follows”<<endl;
- while(i<size)
- {
- cout<<Aint[i]<<endl;
- i++ ;
- }
- cout<<”show over”<<endl;
- }
- // line is the line num;
- void radix_sort::tableinert(int (& T)[10][size],int line,int data)
- {
- int i = 0 ;
- while(i<size)
- {
- // if now space is NULL, so put it in
- if(T[line][i] == -1 )
- {
- T[line][i] = data;
- break;
- }
- i++;
- }
- }
- // function: save data out to file;
- void radix_sort::datasave()
- {
- ofstream fileWriter;
- fileWriter.open(”sorteddata.txt”);
- fileWriter.clear();
- int i = 0;
- while(i<size)
- {
- fileWriter<<Aint[i]<<”/”;
- i++;
- }
- cout<<”save over”<<endl;
- fileWriter.close();
- }
- // function:析构函数;
- radix_sort::~radix_sort(void)
- {
- delete [] Aint ;
- }
- int main()
- {
- radix_sort RS = new radix_sort() ;
- RS->dataReader();
- RS->datashow();
- RS->sort();
- RS->datasave();
- delete RS ;
- system(”pause”);
- return 0;
- }
阅读全文
0 0
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 在window下 安装vue.js
- Python中list的extend方法
- spring-boot 之 Hello World
- bootstrap table服务端实现分页
- C#封装DataTable到DBF
- 基数排序
- 20170809
- wireshark抓包常见问题分析
- 易经与人生-傅佩荣有声系列1
- aop(面向切面)编程思想在spring框架下实现的配置方法
- java并发实战读书笔记
- Spring cache + redis 项目偶发死锁异常浅析
- 2017-8-9
- 课时21 Linux系统启动详解