基數排序的實現及測試

來源:互聯網
上載者:User

基數排序過程無須比較關鍵字,而是通過“分配”和“收集”過程來實現排序。它們的時間複雜度可達到線性階: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;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.