查詢與排序

2022-12-01 12:00:04 字數 2867 閱讀 3063

● 掌握常用查詢演算法的基本實現方式;

● 掌握各種排序演算法的基本實現方式;

● 熟悉各種查詢與排序演算法的特點

現有某地區某學校學生高考成績資料(請見文字檔案)若干,其中每位學生的資訊包括考號、語文、數學、英語、理綜、總分、全省排名、錄取批次。請根據這些資料請建立乙個順序表。使用者可通過數字鍵選擇資訊查詢及排序功能。

對程式的具體要求如下:

1) 程式啟動後,顯示下列選項資訊:

1:排序 2:查詢 0:退出

2) 輸入數字「1」,進入排序區。進一步顯示下列資訊:

3:直接插入排序 4: 簡單選擇排序 5:氣泡排序 6、高考總排名7 退出排序

輸入數字「3」,程式按照數學成績進行直接插入排序並顯示結果。

輸入數字「4」,程式按照語文成績進行簡單選擇排序並顯示結果。

輸入數字「5」,程式按照總分進行氣泡排序並顯示結果。

輸入數字「6」,程式進行高考總排名並顯示結果,排名規則:總成績、數學、語文、英語、理綜。即先按總成績排,總成績相同,按數學成績的高低排名;若數學成績也相同,按照語文成績的高低排序;以此類推。

注意排序方法的綜合運用。

輸入數字「7」,退出排序。

3) 可以在上述排序的基礎上,進行查詢實驗。

8:順序查詢 9: 折半查詢 10:退出查詢

輸入數字「8」,程式提示由使用者輸入全省排名,然後按照全省排名進行順序查詢並顯示結果。

輸入數字「9」,程式提示由使用者輸入總分,然後按照總分進行折半查詢並顯示結果。

輸入數字「10」,退出查詢。

◆ 選做內容:在排序程式中,可以加入快速排序,歸併排序演算法;在查詢程式中,可以加入二叉排序樹查詢。

各模組名稱以及功能說明:

long getlong(file *cfptr)函式:根據每乙個結構體的長度為單位長度,從txt文件的頭開始計算,統計一共的學生人數。

long load(file *cfptr)函式:將txt文件裡的資訊存入stu裡。

void zhijiecharu(struct data stu,int count)函式:直接插入排序,根據語文分數的高低,逐一按照關鍵字的大小插入到已經排好序的序列中的適當位置。

void jiandanxuanze(struct data stu,int count)函式:根據數學分數的高低,在所有的記錄中選出關鍵字最小的記錄,把它與第乙個儲存位置交換,然後再餘下的記錄中取出次小的關鍵字的對應記錄,將其餘與第二個記錄交換,不斷重複到最後乙個。

void maopao(struct data stu,int count)函式:根據總分,從第乙個資料開始,兩兩比較相鄰記錄的關鍵字,即比較stu[i]和stu[i+1]的總分的大小,若倒序,則交換兩者的位置,如此經過一趟排序,關鍵字最大的就放在了第乙個位置,解這對之後的元素進行同樣的處理,進行count-1次的操作。

void gaokaopaiming(struct data stu,int count)函式:根據總成績、數學、語文、英語、理綜的順序進行排序,類似於氣泡排序,其中的判斷語句為(stu[j].totalvoid shunxuchazhao(struct data stu,int count)函式:

在乙個次數為count的for迴圈中,根據全省的排名進行查詢,找到則輸出相關的資訊,找不到則輸出「無資料儲存」的資訊。

void zhebanchazhao(struct data stu,int count)函式:先取表中間的位置的記錄的總分和所輸入的學生的關鍵字進行比較,若相等,則查詢成功,如果給定值比記錄的關鍵字大,則在後半部分繼續進行折半查詢,否則在前半部分進行折半查詢。逐步縮小區域,知道找到關鍵字。

void exchange(struct data stu,int count)函式: 根據總分,對資訊進行排序,以便供折半查詢使用。

tnode *creat(struct data stu,int count)函式:按總分建立二叉排序樹,不斷開闢空間,存入相關的資訊,然後根據總分的比較,進行相應的連線,構成了二叉排序樹。

tnode *find(tnode *p)函式:在二叉排序樹里根據輸入的關鍵字,遍歷查詢學生資訊。

void quicksort(struct data stu,int low,int high)函式:利用遞迴的方法快速查詢。

int qpass(struct data stu,int low ,int high)函式:選取乙個元素的關鍵字作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面。

void kuaisupaixu(struct data stu,int count)函式:包含了快速排序的函式,在呼叫時case裡顯得更簡便。

void merge(struct data stu,struct data stu_s,int l,int m,int n)函式:該函式把陣列看成count個記錄的有序表,進行兩兩歸併,存入乙個新的stu_s裡,形成歸併排序。

void mergepass(struct data stu,struct data stu_s,int count)函式:執行一次歸併過程的函式,根據每乙個元的長度,來執行一趟歸併排序。

void mergesort(struct data stu,struct data stu_s,int count)函式:2—路歸併排序,初始每乙個有序表的長度為1,然後執行相應的判斷,直到在stu_s裡排序完畢,最後在重新存入stu中。

void guibingpaixu(struct data stu,int count)函式:並歸的「主函式」,裡面有相應歸併函式,在case裡使函式理解更加簡潔

主要功能函式的程式流程圖:

void zhijiecharu(struct data stu,int count)

void jiandanxuanze(struct data stu,int count)

void maopao(struct data stu,int count)

查詢排序練習

1.由n個元素構造的二叉排序樹的高度為 a.2n 1 b.n c.log2n 1 d.以上都不是 2.用序列構造一棵二叉排序樹,其高度為 a.7b.6c.5 d.4 3.對於序列,若進行了一趟排序後得到的序列為,則採用的是 a.氣泡排序 b.直接插入排序c.堆排序 d.快速排序 4.線性表結構的查詢...

資料結構查詢排序實驗

實驗五 查詢和排序 班級 b09513 學號 200940 姓名 一 實驗目的 1 掌握查詢的不同方法,並能用高階語言實現查詢演算法。2 熟練掌握順序表和有序表的順序查詢和二分查詢方法。3 掌握排序的不同方法,並能用高階語言實現排序演算法。4 熟練掌握順序表的選擇排序 氣泡排序和直接插入排序演算法的...

資料結構實驗報告五,查詢與排序

實驗六查詢與排序 一 實驗目的 1 理解掌握查詢與排序在計算機中的各種實現方法。2 學會針對所給問題選用最適合的演算法。3 熟練掌握常用排序演算法在順序表上的實現。二 實驗要求 掌握利用常用的查詢排序演算法的思想來解決一般問題的方法和技巧,進行演算法分析並寫出實習報告。三 實驗內容及分析 設計乙個學...