C語言實現結構鍊錶的選擇排序

2021-09-19 06:40:06 字數 1200 閱讀 6803

在實現學生成績(存入很多態別資料,如學號,成績,課程號等)排序的時候,要根據正序輸出。因為在以前做過陣列的選擇排序,所以本來以為鍊錶差不多,但是在實際操作的時候出現了很多問題。

1.選擇排序的原理就是

2.首先是怎麼交換位置,誠然,利用改變指標的指向可以交換節點。但是我覺得可以通過交換結構體的內容,而不動節點本身。

typedef struct studentstudent;

typedef struct coursecourse;

typedef struct coursegradecoursegrade;

typedef struct allinformationallinformation;

typedef struct linknodelinkstnode;//重點,只需要交換'a'

3.在初始化指向結構體的指標時需要賦值,否則就成為懸空指標,後果不可預知。

4.第乙個for迴圈對應被比較的指標的移動,第二個for迴圈對應第二個比較指標的移動。第乙個,第二個迴圈的結束條件都是是pt2!=null;

5.注意,指向結構的指標(最外層的結構名)指向內容時,用**『->』。下層結構用『.』** 翻譯為「的」。

6.乙個關鍵點是,pt1的內容和pt2內容的交換。因為基本思路是不交換節點,只交換節點的內容(之所以結構的巢狀也是為了實現這個思路),所以需要乙個p儲存pt1的內容(如同所有交換數值的操作)。這個時候p不能是指標。

linkstnode *p=pt1;//這是錯的 linkstnode p; p.a=pt1->a;//這是對的

因為,如果將這裡將pt1賦值給p,相當於將pt1指標賦值給指標p,pt1變化,p也會變化,所以要把p變為結構體而不是指標。

因此,此函式如下

linkstnode* sortlist(linkstnode* pheadnode)}}

return pheadnode;

}//鍊錶的選擇排序

還有需求沒有實現,任重而道遠。

選擇排序 C語言實現

選擇排序是一種簡單直觀的排序演算法,它與氣泡排序很相似,都是比較n 1輪,每輪 n 1 i 次每輪找出乙個最大 最小值。只不過冒泡放最後,選擇排序放最左。本文以從小到大排序為例 與冒泡的比較 冒泡是將相鄰的數逐個進行比較 從小到大為例 只要前面的比後面的大,就互換倆數,直到最後將最大的數 浮到 最末...

選擇排序,C語言實現

下面我們來介紹一下選擇排序。選擇排序的思想是每次都從剩餘的元素中找到最小值,然後把這個最小值放到已經有序的部分元素的後面。這個過程的時間複雜度為o n 一共需要找n個元素,所以總的時間複雜度是o n2 其中,尋找最小值的 如下 int minindex i int min arr i for int...

資料結構 C語言實現選擇排序

一 選擇排序簡介 選擇排序是外層進行n 1趟排序,內層進行n 1趟排序,每一趟選出最大或最小的資料放在最前面。二 實現 include 將兩個資料交換 void swap int ina int inb 函式功能 選擇排序,把資料從小到大排序 引數解釋 inarray 輸入的陣列 inlen 輸入的...