基数排序
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 << "\n"; 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 << "\n"; 111 112 return 0; 113 114 115 116 }

【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步