Chapter 7 SortingWord文档下载推荐.docx
《Chapter 7 SortingWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Chapter 7 SortingWord文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
programradixQueue.c,LSDCh9-4-1.c
7.9pp.7-55,56
7.10.5D.Huffmanpp.7-79,80,81,82,83
/*程式範例:
BobbleSortCh9-2-1.c*/
#include<
stdio.h>
stdlib.h>
#defineMAX_LEN20/*最大字串長度*/
/*函數:
泡沫排序法*/
voidbubbleSort(char*data,intcount){
inti,j;
/*變數宣告*/
inttemp;
for(j=count;
j>
1;
j--){/*第一層迴圈*/
for(i=0;
i<
j-1;
i++)/*第二層迴圈*/
/*比較相鄰的陣列元素*/
if(data[i+1]<
data[i]){
temp=data[i+1];
/*交換陣列元素*/
data[i+1]=data[i];
data[i]=temp;
}
/*顯示第一層迴圈執行後交換的字串*/
printf("
%d:
[%s]\n"
count-j+1,data);
}
}
/*主程式*/
intmain(){
chardata[MAX_LEN];
/*字串陣列*/
intlen;
/*字串長度*/
輸入欲排序的字串==>
"
);
gets(data);
/*讀取字串*/
len=strlen(data);
/*計算字串長度*/
bubbleSort(data,len);
/*執行泡沫排序法*/
/*顯示排序後字串*/
\n輸出排序結果:
data);
system("
PAUSE"
return0;
Ch9-2-2.c*/
選擇排序法*/
voidselectSort(char*data,intcount){
inti,j,pos;
/*pos最小字元索引*/
chartemp;
count-1;
i++){/*第一層迴圈*/
pos=i;
temp=data[pos];
/*找尋最小的字元*/
for(j=i+1;
j<
count;
j++)/*第二層迴圈*/
if(data[j]<
temp){/*是否更小*/
pos=j;
/*找到最小字元*/
temp=data[j];
data[pos]=data[i];
/*交換兩個字元*/
i+1,data);
selectSort(data,len);
/*執行選擇排序法*/
InsertSortingCh9-2-3.c*/
插入排序法*/
voidinsertSort(char*data,intcount){
for(i=1;
temp=data[i];
/*建立初值*/
j=i-1;
/*開始索引*/
/*空出一個插入位置*/
while(j>
=0&
&
temp<
data[j]){
data[j+1]=data[j];
j--;
data[j+1]=temp;
/*插入字元*/
i,data);
insertSort(data,len);
/*執行插入排序法*/
ShellSortCh9-2-4.c*/
#defineH_LEN3/*h佇列的最大數*/
謝耳排序法*/
voidshellSort(char*data,intcount){
intincs[H_LEN]={4,2,1};
/*設定h序列的增量*/
intpos;
/*處理的目前索引*/
inth;
/*h序列的位移量*/
H_LEN;
i++){/*處理h序列的迴圈*/
h=incs[i];
/*取得h位移量*/
for(j=h;
j++){/*交換迴圈*/
/*保留值*/
pos=j-h;
/*計算索引*/
while(temp<
data[pos]&
/*比較*/
pos>
=count){
data[pos+h]=data[pos];
/*交換*/
pos=pos-h;
/*下一個處理索引*/
data[pos+h]=temp;
/*與最後元素交換*/
/*顯示處理後的字串*/
h序列%d:
h,data);
shellSort(data,len);
/*執行謝耳排序法*/
QuickSortCh9-3-2.c*/
快速排序法的遞迴函數*/
voidq_sort(char*data,intbegin,intend){
charpartition;
/*分割的字元*/
intleft,right,k;
if(begin<
end){/*遞迴中止條件,是否繼續分割*/
left=begin;
/*分割的最左索引*/
right=end+1;
/*分割的最右索引*/
partition=data[left];
/*取第一個元素*/
do{/*主迴圈分別從兩個方向找尋交換元素*/
do{/*從左往右找*/
left++;
}while(data[left]<
partition);
do{/*從右往左找*/
right--;
}while(data[right]>
if(left<
right){
temp=data[left];
/*交換資料*/
data[left]=data[right];
data[right]=temp;
}while(left<
right);
temp=data[begin];
data[begin]=data[right];
輸出結果:
/*顯示處理中的字串*/
for(k=begin;
k<
=end;
k++)
%c"
data[k]);
\n"
/*換行*/
q_sort(data,begin,right-1);
/*快速排序遞迴呼叫*/
q_sort(data,right+1,end);
/*快速排序遞迴呼叫*/
快速排序法*/
voidquickSort(char*data,intcount){
q_sort(data,0,count-1);
quickSort(data,len);
/*執行快速排序法*/
/*程式範例:
MergeSortCh9-3-1.c*/
合併陣列*/
voidmerge(char*data,intstart,intmid,intend){
intleft=start;
/*左半部的索引*/
intright=mid+1;
/*右半部的索引*/
inti;
char*finalData;
/*配置合併區段所需的記憶體空間*/
finalData=(char*)malloc(sizeof(char)*(end-start+2));
/*合併左右兩半部分區段的迴圈*/
for(i=0;
(end-start+1);
i++){
if(left>
mid){
finalData[i]=data[right];
right++;
}elseif(right>
end){
finalData[i]=data[left];
}elseif(data[left]<
data[right]){
}else{
finalData[i]='
\0'
;
/*字串結尾*/
/*複製到原始陣列的區段*/
(end-start+1);
i++){
data[start+i]=finalData[i];
}/*顯示合併後的字串*/
%d-%d-%d:
start,mid,end,finalData);
合併排序法*/
voidmergeSort(char*data,intstart,intend){
intmid;
if(end<
=start)return;
/*終止條件*/
mid=(start+end)/2;
/*中間索引*/
mergeSort(data,start,mid);
/*遞迴排序左半邊*/
mergeSort(data,mid+1,end);
/*遞迴排序右半邊*/
merge(data,start,mid,end);
/*合併陣列*/
mergeSort(data,0,len-1);
/*執行合併排序法*/
}*/
*程式範例:
HeapSortCh9-4-3.c*/
建立堆積*/
voidsiftDown(int*heap,introot,intlen){
intdone;
/*是否可結束*/
intj,temp;
j=2*root;
/*子節點索引*/
temp=heap[root];
/*堆積的根節點值*/
done=0;
while(j<
=len&
!
done){/*主迴圈*/
if(j<
len)/*找最大子節點*/
if(heap[j]<
heap[j+1])
j++;
/*下一節點*/
if(temp>
=heap[j])/*比較樹的根節點*/
done=1;
/*結束*/
else{
heap[j/2]=heap[j];
/*父節點是目前節點*/
j=2*j;
/*其子節點*/
heap[j/2]=temp;
/*父節點為根節點值*/
堆積排序法*/
voidheapSort(int*heap,intlen){
inti,j,temp;
/*將二元樹轉成堆積*/
for(i=(len/2);
i>
=1;
i--)
siftDown(heap,i,len);
\n堆積的內容:
for(j=1;
10;
j++)/*顯示堆積*/
[%d]"
heap[j]);
/*堆積排序法的主迴圈*/
for(i=len-1;
i--){
temp=heap[i+1];
/*交換最後元素*/
heap[i+1]=heap[1];
heap[1]=temp;
siftDown(heap,1,i);
/*重建堆積*/
\n重建的堆積:
j++)/*顯示處理內容*/
intmain()