常用排序算法之基数排序
来源:互联网 发布:淘宝达人链接 编辑:程序博客网 时间:2024/05/20 19:32
#include"vld.h"//检测是否有内存泄漏#include<iostream>using namespace std;struct MyInt{int val;MyInt *next=NULL;};struct MyBase{MyInt *head = NULL;MyInt *tail = NULL;};//每轮排好一位数后,将排好序的数放入另一个桶中,如果两个数排序位都为0,则都链接在base[0]后MyBase baseA[10];//基数排序的桶A一共10个数(代表0-9)MyBase baseB[10];//基数排序的桶B一共10个数(代表0-9)int Change(MyInt *baseA, MyBase *baseB)//将桶A中的数,加入桶B中相应的位置{if (baseB->head == NULL){baseB->head = baseA;baseB->tail = baseA;}else{baseB->tail->next = baseA;baseB->tail = baseB->tail->next;}return 0;}int Sort(MyInt *TempNum, MyBase *baseB, int TempInt){switch (TempInt){case 0:Change(TempNum, &baseB[0]);break;case 1:Change(TempNum, &baseB[1]);break;case 2:Change(TempNum, &baseB[2]);break;case 3:Change(TempNum, &baseB[3]);break;case 4:Change(TempNum, &baseB[4]);break;case 5:Change(TempNum, &baseB[5]);break;case 6:Change(TempNum, &baseB[6]);break;case 7:Change(TempNum, &baseB[7]);break;case 8:Change(TempNum, &baseB[8]);break;case 9:Change(TempNum, &baseB[9]);break;default:break;}return 0;}void SortRadix(MyInt *TempNum[3]){for (int i = 0; i < 10; i++){int TempInt = 0;TempNum[0] = new MyInt(); //每次进入循环就new一个MyInt类型的空间cin>>TempNum[0]->val;//输入TempNum[0]->next = NULL;TempInt = TempNum[0]->val % 10;Sort(TempNum[0], baseA, TempInt);//将输入的10个数按个位数的数值放入桶A中}for (int i = 0; i < 10; i++){while (baseA[i].head != NULL){TempNum[1] = new MyInt();TempNum[1]->val = baseA[i].head->val;TempNum[1]->next = NULL;int TempInt = 0;TempInt = baseA[i].head->val / 10;TempInt = TempInt % 10;Sort(TempNum[1], baseB, TempInt);if (baseA[i].head != NULL&&baseA[i].head->next != NULL){MyInt * temp = baseA[i].head;baseA[i].head = baseA[i].head->next;delete temp;//对应于TempNum[0]的new}else{delete baseA[i].head;//对应于TempNum[0]的newbreak;}}baseA[i].head = NULL;baseA[i].tail = NULL;}for (int i = 0; i < 10; i++){while (baseB[i].head != NULL){TempNum[2] = new MyInt();TempNum[2]->val = baseB[i].head->val;TempNum[2]->next = NULL;int TempInt = 0;TempInt = (baseB[i].head->val / 10)/10;TempInt = TempInt % 10;Sort(TempNum[2], baseA, TempInt);if (baseB[i].head != NULL&&baseB[i].head->next != NULL){MyInt * temp = baseB[i].head;baseB[i].head = baseB[i].head->next;delete temp;//对应于TempNum[1]的new}else{delete baseB[i].head;//对应于TempNum[1]的newbreak;}}baseB[i].head = NULL;baseB[i].tail = NULL;}}int main(){cout << "请依次输入需要排序的10个数:" << endl;MyInt *TempNum[3];//三位数SortRadix(TempNum);cout << "经过基数排序后的顺序为:" << endl;for (int i = 0; i < 10; i++){MyInt * temp = baseA[i].head;while (baseA[i].head!=NULL){cout << baseA[i].head->val << endl;if (baseA[i].head->next != NULL)baseA[i].head = baseA[i].head->next;elsebreak;}baseA[i].head = temp;//输出完后再将指针指会原来的位置}//防止内存泄漏for (int i = 0; i < 10; i++)//对应于TempNum[2]的new{while (baseA[i].head != NULL&&baseA[i].head->next != NULL){MyInt * temp = baseA[i].head;baseA[i].head = baseA[i].head->next;delete temp;}delete baseA[i].head;}return 0;}
阅读全文
0 0
- 常用排序算法之基数排序
- 常用排序算法之基数排序
- 常用排序算法之计数排序,基数排序与桶排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 【排序算法】之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 文章标题
- iconFont在iOS上的使用详解
- Nginx反向代理简单配置
- POJ 3253
- 旁路、去耦、Bulk以及耦合电容的作用与区别
- 常用排序算法之基数排序
- 关于 WinXP SP2 下的 CVE-2014-8636 漏洞利用
- 集合框架(Util包)
- JAVA-1046. 划拳(15)
- ASP.NET MVC三种创建方式
- 深度学习笔记——Word2vec和Doc2vec应用举例:词和句子的相似度计算
- A*算法解决八数码问题 Java语言实现
- Digit Counts 解题报告
- LeetCode 582