1、計算機軟體基礎課程設計代碼及課程設計報告
一.選擇排序
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
詳細內容,附圖:
2、計算機通信網路實訓 課設實驗報告 北京信息科技大學
阿里的宣言與某些抄傳言,又為馬雲與游戲新增許多想像空間。
葡萄君了解到的,阿里確實挖了一些騰訊、360等平台型公司的人做手游,找獵頭開出相當高的價碼要人,跟北上廣深諸多CP也密切接觸洽談合作。這一次,不像幾年前阿里做頁游時那樣只是試水。