當前位置:編程學習大全網 - 源碼下載 - 計算機軟件技術基礎課程設計

計算機軟件技術基礎課程設計

壹.選擇排序

1. 基本思想:

每壹趟從待排序的數據元素中選出最小(或最大)的壹個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。

2. 排序過程:

示例:

初始關鍵字 [49 38 65 97 76 13 27 49]

第壹趟排序後 13 〔38 65 97 76 49 27 49]

第二趟排序後 13 27 〔65 97 76 49 38 49]

第三趟排序後 13 27 38 [97 76 49 65 49]

第四趟排序後 13 27 38 49 [49 97 65 76]

第五趟排序後 13 27 38 49 49 [97 97 76]

第六趟排序後 13 27 38 49 49 76 [76 97]

第七趟排序後 13 27 38 49 49 76 76 [ 97]

最後排序結果 13 27 38 49 49 76 76 97

3.

void selectionSort(Type* arr,long len)

{

long i=0,j=0;/*iterator value*/

long maxPos;

assertF(arr!=NULL,"In InsertSort sort,arr is NULL\n");

for(i=len-1;i>=1;i--)

{

maxPos=i;

for(j=0;j<i;j++)

if(arr[maxPos]<arr[j])maxPos=j;

if(maxPos!=i)swapArrData(arr,maxPos,i);

}

}

選擇排序法的第壹層循環從起始元素開始選到倒數第二個元素,主要是在每次進入的第二層循環之前,將外層循環的下標賦值給臨時變量,接下來的第二層循環中,如果發現有比這個最小位置處的元素更小的元素,則將那個更小的元素的下標賦給臨時變量,最後,在二層循環退出後,如果臨時變量改變,則說明,有比當前外層循環位置更小的元素,需要將這兩個元素交換.

二.直接插入排序

插入排序(Insertion Sort)的基本思想是:每次將壹個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子文件中的適當位置,直到全部記錄插入完成為止。

直接插入排序

直接插入排序(Straight Insertion Sort):將壹個記錄插入到排好序的有序表中,從而得到壹個新的、記錄數增1的有序表。

直接插入排序算法

哨兵(監視哨)有兩個作用:壹是作為臨變量存放R[i](當前要進行比較的關鍵字)的副本;二是在查找循環中用來監視下標變量j是否越界。

當文件的初始狀態不同時,直接插入排序所耗費的時間是有很大差異的。最好情況是文件初態為正序,此時算法的時間復雜度為O(n),最壞情況是文件初態為反序,相應的時間復雜度為O(n2),算法的平均時間復雜度是O(n2)。算法的輔助空間復雜度是O(1),是壹個就地排序。

直接插入排序是穩定的排序方法。

三. 冒泡排序

[算法思想]:將被排序的記錄數組R[1..n]垂直排列,每個記錄R[i]看作是重量為R[i].key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮"。如此反復進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。

[算法]:

void BubbleSort(SeqList R) {

//R(l..n)是待排序的文件,采用自下向上掃描,對R做冒泡排序

int i,j;

Boolean exchange; //交換標誌

for(i=1;i<n;i++){ //最多做n-1趟排序

exchange=FALSE; //本趟排序開始前,交換標誌應為假

for(j=n-1;j>=i;j--) //對當前無序區R[i..n]自下向上掃描

if(R[j+1].key<R[j].key){//交換記錄

R[0]=R[j+1]; //R[0]不是哨兵,僅做暫存單元

R[j+1]=R[j];

R[j]=R[0];

exchange=TRUE; //發生了交換,故將交換標誌置為真

}

if(!exchange) return;//本趟排序未發生交換,提前終止算法

} //endfor(外循環)

} //BubbleSort

詳細內容,附圖:

/_%E2d_%B7%B3_%DE%B2%C2%D2/blog/item/2177742ea4a265544ec22621.html

  • 上一篇:如何理解Python裝飾器
  • 下一篇:求最新版達內JAVA視頻教程百度雲下載鏈接,謝謝!
  • copyright 2024編程學習大全網