zoukankan      html  css  js  c++  java
  • 基数排序

     
      1 #include<iostream>
      2 #include<string>
      3 using namespace std;
      4 //数值型基数排序
      5 int getDigit(int num, int index)
      6 {
      7     int mod = 1;
      8     while (index)
      9     {
     10         mod *= 10;
     11         index--;
     12     }
     13     int div = mod / 10;
     14     return num%mod / div;
     15 
     16 }
     17 
     18 void Count_Sort(int *A, int *B, int len, int k,int d)
     19 {
     20     int count = k + 1;
     21     int *C = new int[count];
     22     for (int i = 0; i < count; i++)
     23     {
     24         C[i] = 0;
     25     }
     26     for (int i = 0; i < len; i++)
     27     {
     28         C[getDigit(A[i], d)] = C[getDigit(A[i], d)] + 1;
     29     }
     30     for (int i = 1; i < count; i++)
     31         C[i] = C[i] + C[i - 1];
     32     for (int i = len-1; i >=0; i--)
     33     {
     34         B[C[getDigit(A[i], d)] - 1] = A[i];
     35         C[getDigit(A[i], d)] = C[getDigit(A[i], d)] - 1;
     36     }
     37 }
     38 void RADIX_SORT(int *A, int d,int len)
     39 {
     40     for (int i = 1; i <=d; i++)
     41     {
     42         int *B = new int[len];
     43         Count_Sort(A, B, len, 10,i);
     44         for (int i = 0; i < len; i++)
     45         {
     46             A[i] = B[i];
     47         }
     48     }
     49 }
     50 //字符型基数排序
     51 int getAlpha(string A, int index)
     52 {
     53     return (A[A.length()-index]-'a');
     54 }
     55 void Count_SortAlpha(string*A, string*B, int len, char k, int d)
     56 {
     57     int count = (k-'a' + 1);
     58     int *C = new int[count];
     59     for (int i = 0; i < count; i++)
     60     {
     61         C[i] = 0;
     62     }
     63     for (int i = 0; i < len; i++)
     64     {
     65         C[getAlpha(A[i], d)] = C[getAlpha(A[i], d)] + 1;
     66     }
     67     for (int i = 1; i < count; i++)
     68         C[i] = C[i] + C[i - 1];
     69     for (int i = len - 1; i >= 0; i--)
     70     {
     71         B[C[getAlpha(A[i], d)]-1 ] = A[i];
     72         C[getAlpha(A[i], d)] = C[getAlpha(A[i], d)] - 1;
     73     }
     74 }
     75 void RADIX_SORTAlpha(string A[], const int d, const int len)
     76 {
     77     for (int i = 1; i <= d; i++)
     78     {
     79         string *B=new string[len];
     80         Count_SortAlpha(A, B, len, 'z', i);
     81         for (int i = 0; i < len; i++)
     82         {
     83             A[i] = B[i];
     84         }
     85         delete[] B;
     86     }
     87 }
     88 
     89 int main()
     90 {
     91 
     92     
     93         int A[] = { 329,457,657,839,436,720,355,0,12,15,105 };     
     94         int N = sizeof A / sizeof A[0];
     95         RADIX_SORT(A, 3, N);
     96         for (int i = 0; i<N; i++)
     97         {
     98             cout << A[i] << "  ";
     99         }
    100         cout << "
    ";
    101 
    102         string Alpha[] = { "cow", "sea", "rug", "row","mob","box","tab","bar","tar","dig","big","tea","now","fox" };
    103 
    104         N = sizeof Alpha / sizeof Alpha[0];
    105         RADIX_SORTAlpha(Alpha, 3, N);
    106         for (int i = 0; i < N; i++)
    107         {
    108             cout << Alpha[i] << "  ";
    109         }
    110         cout << "
    ";
    111 
    112         return 0;
    113     
    114 
    115 
    116 }
    
    
  • 相关阅读:
    Android UI--自定义ListView(实现下拉刷新+加载更多)
    12306火车票订票网站的一个Bug
    golang中赋值string到array
    Node.js学习(14)----EJS模板引擎
    操作系统
    springMVC学习笔记--初识springMVC
    sqlplus 连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0
    对于事务和同步(并发)的简要理解
    Jsoup入门
    [LeetCode]Single Number
  • 原文地址:https://www.cnblogs.com/liuhg/p/Radix_Sort.html
Copyright © 2011-2022 走看看