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