#includeusing namespace std ;
//歸併排序(merging sort) : 將兩個或兩個以上的有序表組成乙個新的有序表.
//2-路歸併排序中的核心操作是將一堆陣列中前後相鄰的兩個有序序列歸併為乙個有序序列
#define maxsize 20 //儲存元素的順序表的最大長度
typedef int keytype ; //關鍵字型別
typedef int infotype ; //其他資料項型別
typedef struct rcdtype ;
typedef struct sqlist ; //順序表型別
void input( sqlist &l )
l.length = i - 1 ;
}void output( sqlist l )
cout << endl ;
}void merge( rcdtype sr , rcdtype tr , int i , int m , int n )
// if( i < m + 1 ) //so stupid!
// // if( j < n + 1 )
//
while( i < m + 1 )
tr[ k ++ ] = sr[ i ++ ] ;
while( j < n + 1 )
tr[ k ++ ] = sr[ j ++ ] ;
}void msort( rcdtype sr , rcdtype tr1 , int s , int t )
delete tr2 ; //此處釋放出現問題! oh! shirt! 如果"rcdtype *tr2 = new rcdtype[a]"中a為t-s+1的話,那麼資料將會儲存在下標為(0到t-s)的空間中。而題中要求儲存在(s到t)的空間中,所以會將資料寫到所申請空間的鄰近區間。所以釋放是會出錯。
} //void merge( rcdtype *sr , int sta , int mid , int end )
//while( i < num1 )
sr[ k++ ] = left[ i++ ] ;
while( j < num2 )
sr[ k++ ] = right[ j++ ] ;
delete left ;
delete right ; */
/* rcdtype *tr = new rcdtype[ end - sta + 1 ] ;
for( int i = 0 ; i < end - sta + 1 ; ++ i )
tr[ i ] = sr[ sta + i ] ; //tr中的資料從第0號開始,到第(end-sta)號結束
i = 0 ; //元素在tr中位於0.....(end - sta),在sr中位於sta.....end.
int j = mid - sta + 1 ;
int k = sta ;
while( i < mid - sta + 1 && j < end - sta + 1 ) //前半部分為0....(mid-sta).後半部分為(mid-sta+1)....(end-sta)
while( i < mid - sta + 1 )
sr[ k ++ ] = tr[ i ++ ] ;
while( j < end - sta + 1 )
sr[ k ++ ] = tr[ j ++ ] ;
delete tr ;
}void msort( rcdtype *sr , int s , int t )
} */
void mergesort( sqlist &l )
int main( )
第十章 排序 歸併排序與基數排序
2 1 對n個記錄進行歸併排序,歸併趟數的數量級是 1分 o logn o n o nlogn o n 2 2 2對n個記錄進行歸併排序,空間複雜度為 1分 o logn o n o nlogn o n 2 2 3給出關鍵字序列,下面哪個選擇是按次位優先 lsd 鏈式基數排序進行了一趟分配和收集的結...
第十章(4) 希爾排序
include using namespace std 希爾排序 shell sort 又稱 縮小增量排序 他是對插入排序類方法的改進 1.對插入排序的分析得其時間複雜度為o n n 但若待排記錄為 正序 時,其時間複雜度可提高至o n 2.在直接插入排序中,當n值很小的時候效率比較高 所以,希爾排...
第十章 SQL排序(一)
排序規則指定值的排序和比較方式,並且是intersystems sql和intersystemsiris 資料平台物件的一部分。有兩種基本排序規則 數字和字串。預設的字串排序規則是sqlupper 為每個命名空間設定此預設值。sqlupper排序規則將所有字母都轉換為大寫 出於排序的目的 並在字串的...