基數排序過程無須比較關鍵字,而是通過“分配”和“收集”過程來實現排序。它們的時間複雜度可達到線性階:O(n),是一種穩定排序
基數排序的實現(用數組的方式,還可以通過鏈表實現)
#pragma once //基數排序#include<iostream>using namespace std;#include<stdio.h>#include<stdlib.h>int Get_Max(int arr[], int n){ int i; int max = 0; for(i = 0; i < n; i++) if(arr[i] > max) max = arr[i]; return max;}void Count_Sort(int arr[], int n, int exp){ int i, count[10] = {0}; int output[10]; for(i = 0; i < n; i++) count[(arr[i] / exp) % 10]++; for(i = 1; i < 10; i++) count[i] += count[i - 1]; for(i = n - 1; i >= 0; i--) { output[count[(arr[i] / exp) % 10] - 1] = arr[i]; count[(arr[i] / exp) % 10]--; } for(i = 0; i < n; i++) arr[i] = output[i];}void Radix_Sort(int arr[], int n){ int exp; int m = Get_Max(arr, n); for(exp = 1; m / exp > 0; exp *= 10) Count_Sort(arr, n, exp);}
基數排序的測試檔案
void main() //基數排序,用數組的方式實現{ int arr[] = {170, 45, 75, 90, 802, 24, 2, 66}; int n = sizeof(arr) / sizeof(arr[0]); Radix_Sort(arr, n); for(int i = 0; i < n; i++) { cout<<arr[i]<<" "; } cout<<endl;}