【經典回放】多種語言系列數據結構算法:基數排序

目錄

一、算法思路

二、C#語言實現

三、C語言實現


一、算法思路

1. 思想基礎

基數排序的思想就是先找出待排序中的最大者,然后按最大者申請一個足夠大的內存空間,并將其初始化為零,然后將所有待排序的數裝入其中,標記裝入的數,最后按下標依次返回所有數即可。

2. 函數

public void RadixSort(int []A,int n)

??????????? {

??????????????? int Max,i,j,m,nz;

??????????????? Max=A[0];

??????????????? for (i=0;i<n;i++)//獲得待排序列中的最大值

??? ??????????? {

??? ??????????????? if (A[i]>Max)

?????? ??????????? Max=A[i];

??? ??????????? }

??????????? Max++;

//以這個最大樹為桶申請內存,裝入所有數

??????????? int[] pt = new int[Max];

??????????? for(i=0;i<Max;i++)//將數組中的所有數初始化為零

??? ??????????? pt[i]=0;

??????????? for(i=0;i<n;i++)//把這些數據逐個放入這些桶里

??? ??????? {

??? ??????????? m=A[i];

??? ??????????? pt[m]++;//讓裝入的數去做數組的下標

??? ??????? }

??????????? m=0; //回收數據,m是排序結果的下標值

??????????? for(i=0;i<Max;i++)

??? ??????? {

??? ??????????? nz=pt[i];

??????????? ? ?for(j=0;j<nz;j++)

?????? ??????? ????A[m++]=i;

??? ??????? }

??????? }

二、C#語言實現

private void button1_Click(object sender, EventArgs e)
{int i;int []a={278,109,63,83,930,589,184,505,269,8,83};//待排序數RadixSort(a,11);listBox1.Items.Clear();for (i = 0; i < 10; i++)listBox1.Items.Add(a[i].ToString());
}
private void button2_Click(object sender, EventArgs e)
{this.Close();
}

運行情況(完整程序見工程“基數排序”):

界面設計

從上面可以看出,基數排序的思想和過程都比較簡單,但效率不是很高。通過該程序,使得對計算機內存有了更深層次的理解;對于基數排序方法,要注意三點:1 構造桶;2 把數據放進桶里; 3 回收數據。

三、C語言實現

#include<stdlib.h>
#include<stdio.h>
#include<windows.h>
void RadixSort(int A[],int n)
{
int Max,i,j,m,nz;
int *pt;
Max=A[0];
for (i=0;i<n;i++){if (A[i]>Max) Max=A[i];}
Max++;
pt=(int *)malloc(Max*sizeof(int));
if (!pt) return;for(i=0;i<Max;i++)pt[i]=0;for(i=0;i<n;i++){m=A[i];pt[m]++;}
m=0;
for(i=0;i<Max;i++){nz=pt[i];for(j=0;j<nz;j++)A[m++]=i;}
free(pt);
}
//獲得n個不重復的隨機數,具體算法不用管
void CreateData(int A[],int n)
{int i,j;srand((unsigned)time(NULL));for(i=0;i<n;i++){A[i]=rand()%n;//以下內容是消除重復,但在數據規模很大的情況下這個過程異常緩慢。/*for(j=0;j<i;j++)while(A[j]==A[i]){A[i]=rand()%n;j=0;}*/}
}void DispTime(SYSTEMTIME sys)
{printf("%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n" ,sys.wYear,sys.wMonth,sys.wDay ,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds ,sys.wDayOfWeek); 
}char * DiffTime(SYSTEMTIME systime0,SYSTEMTIME systime1)
{char st[128];sprintf(st,"%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",systime0.wYear-systime1.wYear,systime0.wMonth-systime1.wMonth,systime0.wDay-systime1.wDay ,systime0.wHour-systime1.wHour,systime0.wMinute-systime1.wMinute,systime0.wSecond-systime1.wSecond,systime0.wMilliseconds-systime1.wMilliseconds ,systime0.wDayOfWeek-systime1.wDayOfWeek); return st;
}main()
{int i,n=0,m;int *A;SYSTEMTIME sys0,sys1;printf("請輸入要排序的數據個數:");scanf("%d",&m);if(m<0){printf("滾!不解釋~\n");exit(0);}A=(int *)malloc(sizeof(int)*m);if(A==NULL){printf("內存不足、程序退出\n");exit(0);}//獲得隨機數CreateData(A,m);printf("測試數據構造完成\n");GetLocalTime(&sys0); RadixSort(A,m);GetLocalTime(&sys1); //打印數據,在數據規模大的情況下很慢/*n=0;for(i=0;i<m;i++){printf("%d\t",A[i]);n++;if(n==10) {printf("\n");n=0;}}printf("\n");*/DispTime(sys0);DispTime(sys1);printf("用時:%s\n",DiffTime(sys1,sys0));free(A);
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287833.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287833.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287833.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java之ThreadPoolExcutor和四種常見的線程池

一、ThreadPoolExcutors的作用 java提供了ThreadPoolExcutors來創建一個線程池&#xff0c;我們為什么要用線程池呢? 1.降低資源的消耗&#xff1a;通過重復利用已經創建好的線程降低線程的創建和銷毀帶來的損耗 2.提高響應速度&#xff1a;因為線程池中的線程處于等待分配任…

探索鏈路追蹤在.NET6工業物聯網項目中的應用

如果覺得有用&#xff0c;請留言學到了。已經會了的老哥&#xff0c;請留言就這&#xff1f;可能遇到的問題工業物聯網系統自上而下一般分為ERP、Mes、SCADA、WCS、邊緣網關、設備等一個生產訂單從SAP發送到設備要經過上述多個系統&#xff0c;當某個環節出現問題&#xff0c;可…

《零基礎看得懂的C語言入門教程 》——(三)輕輕松松理解第一個C語言程序

一、學習目標 了解C語言代碼的一般結構了解函數的概念了解printf函數的使用方法了解頭文件的概念了解system函數的使用方法 目錄 C語言真的很難嗎&#xff1f;那是你沒看這張圖&#xff0c;化整為零輕松學習C語言。 第一篇&#xff1a;&#xff08;一&#xff09;脫離學習誤…

hdu_1728_逃離迷宮(bfs)

題目連接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1728 題意&#xff1a;走迷宮&#xff0c;找最小的拐角 題解&#xff1a;對BFS有了新的理解&#xff0c;DFS剪枝應該也能過&#xff0c;用BFS就要以拐角作為增量來搜&#xff0c;即以當前點為坐標&#xff0c;4…

把文件放在SD卡

2019獨角獸企業重金招聘Python工程師標準>>> 在程序中訪問SDCard&#xff0c;你需要申請訪問SDCard的權限。 在AndroidManifest.xml中加入訪問SDCard的權限如下: <!-- 在SDCard中創建與刪除文件權限--> <uses-permissionandroid:name"android.permiss…

python分層聚類集群合并_24、python分層聚類案例(scipy方法)

目錄1、分層聚類算法2、方法3、分析步驟4、案例1、分層聚類算法層次聚類算法又稱為樹聚類算法&#xff0c;它根據數據之間的距離&#xff0c;透過一種層次架構方式&#xff0c;反復將數據進行聚合&#xff0c;創建一個層次以分解給定的數據集。2、方法01 聚類方法linkagescipy.…

【經典回放】多種語言系列數據結構算法:數組

數組如同前面學過的順序表,一次性申請一片地址連續的存儲空間,我們還知道,計算機中數組是以一維的形式存儲的,因為計算機的內存的一維的。在知道了多維數據的計算機存儲方式后,我們還要知道構造一個多維數據的方法,并構造ADT,具體做法如下所示: 內容和步驟: 1、C語言中…

stl中Priority Queues(優先隊列)的基本用法

博客搬家啦 blog.ma6174.comstl中Priority Queues(優先隊列)的基本用法 C優先隊列類似隊列&#xff0c; 但是在這個數據結構中的元素按照一定的斷言排列有序。 C Priority Queues(優先隊列) empty 語法: bool empty(); empty()函數返回真(true)如果優先隊列為空&#xff0c;否則…

如何用 windbg 導出 C# 中的 string 內容?

咨詢區 driis我在用 windbg 調試一個生產上的 程序卡死 故障 &#xff0c;在線程棧上有一個 string 類型的參數相當大&#xff0c;我用 !dumpobj 命令不能正常顯示內容&#xff0c;參考如下&#xff1a;0:036> !do 00000001b30d8668 Name: System.String MethodTable: 00000…

《零基礎看得懂的C語言入門教程 》——(四)C語言的基本數據類型及變量

一、學習目標 了解C語言的基本數據類型了解變量的基本概念了解變量的使用方法了解了變量的命名方法了解格式占位符了解變量的輸出 目錄 C語言真的很難嗎&#xff1f;那是你沒看這張圖&#xff0c;化整為零輕松學習C語言。 第一篇&#xff1a;&#xff08;一&#xff09;脫離…

android一句話搞定圖片加載

http://square.github.io/picasso/ Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); gradle中添加 compile com.squareup.picasso:picasso:2.5.2 轉載于:https://www.cnblogs.com/rwxwsblog/p/5467874.html

轉HTML+CSS總結/深入理解CSS盒子模型

原文地址&#xff1a;http://www.chinaz.com/design/2010/1229/151993.shtml 前言&#xff1a;前陣子在做一個項目時&#xff0c;在頁面布局方面遇到了一點小問題&#xff0c;于是上stackoverflow上求助。ifaou在幫助我解決我問題的同時&#xff0c;還推薦我閱讀一篇有關CSS盒子…

主成分分析步驟_多元分析(1)--主成分分析

主成分分析主成分分析&#xff08;PCA&#xff09;是數據降維的一種常見方法&#xff0c;其它常見的方法還有因子分析&#xff08;FA&#xff09;,獨立成分分析&#xff0c;在進行大數據處理時&#xff0c;因為數據有很多特征&#xff0c;維數過高&#xff0c;不容易進行處理且…

ArcGIS實驗教程——實驗十九:網絡分析(最短路徑實現)

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據) 一、實驗描述 網絡分析模塊用于實現基于網絡數據集的網絡分析功能,包括路徑分析、服務區分析、最近設施點分析、OD成本矩陣分析、多路徑配送分析、位置分配分析和高級網絡的管理與創建等。 網絡…

設計模式之策略模式和狀態模式

1 策略模式 我們創建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執行算法&#xff0c; 我們可以簡單理解為更加不同的策略對象&#xff0c;執行不同策略方法。 2 類圖 3 代碼實現 1&#xff09;接口&#xff1a;Strat…

期待已久的Java 9 今日發布

人們期待已久的Java SE 9.0將在2017年9月21日發布&#xff0c;它會帶來一些重要的變化。\\JDK 9的核心變化就是引入了一種新的Java編程組件&#xff0c;也就是模塊&#xff0c;按照Oracle的說法&#xff0c;它是一個可命名的、自描述的代碼和數據集合。模塊技術的核心目標是減少…

AspNetCore7.0源碼解讀之UseMiddleware

前言本文編寫時源碼參考github倉庫主分支。aspnetcore提供了Use方法供開發者自定義中間件&#xff0c;該方法接收一個委托對象&#xff0c;該委托接收一個RequestDelegate對象&#xff0c;并返回一個RequestDelegate對象&#xff0c;方法定義如下&#xff1a;IApplicationBuild…

邊工作邊刷題:70天一遍leetcode: day 11-3

Single Number I/II II的python解是網上抄的&#xff0c;其實可以AC&#xff0c;但是python不會像c/java那樣自動overflow&#xff0c;而是轉化成long。所以如果有負數的情況會得到一個巨大的正數解&#xff0c;比如 Input:[-2,-2,1,1,-3,1,-3,-3,-4,-2] Output:4294967292 Exp…

《零基礎看得懂的C語言入門教程 》——(五)C語言的變量、常量及運算

一、學習目標 了解C語言變量的其它創建方式了解C語言常量了解C語言的運算符 目錄 C語言真的很難嗎&#xff1f;那是你沒看這張圖&#xff0c;化整為零輕松學習C語言。 第一篇&#xff1a;&#xff08;一&#xff09;脫離學習誤區 第二篇&#xff1a;&#xff08;二&#xff…

實戰使用Axure設計App,使用WebStorm開發(4) – 實現頁面UI

系列文章 實戰使用Axure設計App,使用WebStorm開發(1) – 用Axure描述需求 實戰使用Axure設計App,使用WebStorm開發(2) – 創建 Ionic 項目 實戰使用Axure設計App,使用WebStorm開發(3) – 構建頁面架構 實戰使用Axure設計App,使用WebStorm開發(4) – 實現頁面UI 實戰使用Axu…