noj大作业c语言扫雷,noj大作业.doc
作業(yè)名稱:算法演示程序?qū)W 院:航海學(xué)院班 級(jí):學(xué) 號(hào):2013300951姓 名:蘇和團(tuán)隊(duì)組成:
西北工業(yè)大學(xué)
2015年11月11日
1、問(wèn)題與背景(描述程序所要解決的問(wèn)題或應(yīng)用背景)
C語(yǔ)言經(jīng)過(guò)幾十年的發(fā)展已經(jīng)發(fā)展出多種多樣的的排序方法,網(wǎng)上的解釋和 代碼良莠不齊,許多具有嚴(yán)重的錯(cuò)誤,給學(xué)習(xí)者打來(lái)極大的不便。
因此,我將目前比較流行的7種排序法:
1.冒泡排序 2.選擇排序 3.插入排序
4.快速排序 5堆排序 6歸并排序
7.基數(shù)排序
加以總結(jié),標(biāo)明注釋,成為這個(gè)演示程序,以供交流學(xué)習(xí)使用。
2、開發(fā)工具(列出所使用的開發(fā)工具和第3方開發(fā)庫(kù))
Code::block
3、主要功能(詳細(xì)說(shuō)明程序的功能)
基本功能:本程序可實(shí)現(xiàn)對(duì)100個(gè)及以下的數(shù)據(jù)排列的功能。
拓展功能:1.選擇不同的排序法進(jìn)行排序。
2.選擇數(shù)據(jù)正序排列,還是逆序排列。
4、設(shè)計(jì)內(nèi)容(詳細(xì)描述解決問(wèn)題的原理和方法、算法、數(shù)據(jù)結(jié)構(gòu)等)
本程序的數(shù)據(jù)變換主要在數(shù)組中進(jìn)行。
冒泡排序
相鄰兩個(gè)記錄之間進(jìn)行比較和互換,使較小的記錄逐漸從底部移向頂部。一次排序后最大的記錄沉底,再比較前n-1個(gè)記錄直到最后一次排列時(shí)只有兩個(gè)記錄。排列結(jié)束后最小的記錄自然上浮至第一位。
選擇排序
第i趟選擇排序通過(guò)n-i次關(guān)鍵碼的比較,從n-i+1個(gè)記錄中選出關(guān)鍵碼最小的記錄,并和記錄i交換。
插入排序
把新插入記錄的關(guān)鍵碼與已排好序的逐個(gè)比較,但找到第一個(gè)比其大的記錄時(shí),該記錄之前即為插入位置k。從序列最后開始到該記錄,逐個(gè)后移一個(gè)單元,將新紀(jì)錄插入k位置。如果新紀(jì)錄比其他記錄都大,則插入到最后。
快速排序
通過(guò)一趟排序?qū)⒁判虻挠涗浄譃閮刹糠?#xff0c;其中一部分比另一部分都要小。再按此方法對(duì)兩組數(shù)據(jù)分別進(jìn)行遞歸快速排序,從而使序列成為有序序列。
堆排序
先將初始文件R[1..n]建成一個(gè)大根堆,此堆為初始的無(wú)序區(qū)。
再將關(guān)鍵字最大的記錄R[1](即堆頂)和無(wú)序區(qū)的最后一個(gè)記錄R[n]交換,由此得到新的無(wú)序區(qū)R[1..n-1]和有序區(qū)R[n]。由于交換后新的根R[1]可能違反堆性質(zhì),故應(yīng)將當(dāng)前無(wú)序區(qū)R[1..n-1]調(diào)整為堆。然后再次將R[1..n-1]中關(guān)鍵字最大的記錄R[1]和該區(qū)間的最后一個(gè)記錄R[n-1]交換,由此得到新的無(wú)序區(qū)R[1..n-2]和有序區(qū)R[n-1..n],同樣要將R[1..n-2]調(diào)整為堆,直到無(wú)序區(qū)只有一個(gè)元素為止。
歸并排序
將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。若將兩個(gè)有序表合并成一個(gè)有序表,稱為二路歸并。
首先申請(qǐng)空間,使其大小為兩個(gè)已經(jīng)排序序列之和,該空間用來(lái)存放合并后的序列。設(shè)定兩個(gè)指針,最初位置分別為兩個(gè)已經(jīng)排序序列的起始位置。比較兩個(gè)指針?biāo)赶虻脑?#xff0c;選擇相對(duì)小的元素放入到合并空間,并移動(dòng)指針到下一位置。重復(fù)直到某一指針超出序列尾。將另一序列剩下的所有元素直接復(fù)制到合并序列尾。
基數(shù)排序
基數(shù)排序法又稱“桶子法”(bucketsort)或binsort,顧名思義,它是透過(guò)鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達(dá)到排序的作用。
對(duì)數(shù)據(jù)來(lái)說(shuō),首先根據(jù)個(gè)位數(shù)的數(shù)值,在走訪數(shù)值時(shí)將它們分配至編號(hào)0到9的桶子中。接下來(lái)將這些桶子中的數(shù)值重新串接起來(lái)。接著再進(jìn)行一次分配,這次是根據(jù)十位數(shù)來(lái)分配。接下來(lái)將這些桶子中的數(shù)值重新串接起來(lái)。重復(fù)以上過(guò)程直到最高位,這時(shí)候整個(gè)數(shù)列已經(jīng)排序完畢。
5、程序文件與工程名稱(標(biāo)出程序中所有文件名、工程名稱及其說(shuō)明)
工程的名稱:排序算法演示程序
包含的程序原文件如下:
1.sort.cpp
主函數(shù)、輸入和輸出數(shù)據(jù)、顯示菜單、選擇排序方法
2. sort_fun.cpp
實(shí)現(xiàn)7種排序的函數(shù)
3. myh.h
7種排序函數(shù)及其附屬函數(shù)的聲明
6、函數(shù)模塊(程序中各個(gè)函數(shù)的原型聲明及其說(shuō)明)
void Bubble(int a[],int n); 冒泡排序
void Selection(int a[],int n); 選擇排序
void Insertion(int a[],int n); 插入排序
void Quick(int a[],int n,int left,int right); 快速排序
void Shift(int a
總結(jié)
以上是生活随笔為你收集整理的noj大作业c语言扫雷,noj大作业.doc的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑玩崩3要什么显卡(崩坏3桌面版吃CP
- 下一篇: 双机之间的串行通信设计 c语言编程,双机