Chapter 7 SortingWord文档下载推荐.docx

上传人:b****8 文档编号:22535805 上传时间:2023-02-04 格式:DOCX 页数:22 大小:93.76KB
下载 相关 举报
Chapter 7 SortingWord文档下载推荐.docx_第1页
第1页 / 共22页
Chapter 7 SortingWord文档下载推荐.docx_第2页
第2页 / 共22页
Chapter 7 SortingWord文档下载推荐.docx_第3页
第3页 / 共22页
Chapter 7 SortingWord文档下载推荐.docx_第4页
第4页 / 共22页
Chapter 7 SortingWord文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

Chapter 7 SortingWord文档下载推荐.docx

《Chapter 7 SortingWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Chapter 7 SortingWord文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

Chapter 7 SortingWord文档下载推荐.docx

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()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1