資料結構 排序和查詢

2021-09-21 09:00:00 字數 2502 閱讀 3596

//氣泡排序

void bubblesort(elemtype r,int n,int &comp_num,int &move_num)

}if(flag == 0) break;}}

//快速排序

void quicksort(elemtype r,int left,int right,int &comp_num,int &move_num)         //快速排序

while((r[i] < temp)&&(iif(i

//一次劃分得到基準值的正確位置

r[i] = temp;

move_num++;

if(left < i-1)

quicksort(r,left,i-1,comp_num,move_num);             //遞迴呼叫左子區間

if(i+1 < right)

quicksort(r,i+1,right,comp_num,move_num);             //遞迴呼叫右子區間

}//歸併排序

void merge(elemtype r,elemtype a,int s,int m,int t,int &comp_num,int &move_num)

//對兩個子區間r[s]~r[m]和r[m+1]~r[t]合併,結果存入a中

else

}while(i <= m)

while(j <= t)

}//希爾排序

void shellsort(elemtype r,int n,int &comp_num,int &move_num) }

printf("    d=%d:   ",d);//輸出每一趟排序的結果

for (k=0;k

void mergepass(elemtype r,elemtype a,int n,int c,int &comp_num,int &move_num)

//對r陣列做一趟歸併,結果存入a陣列中,n為元素個數,c為區間長度

if(i+c-1 < n)   //長度不等的兩個區間合併成乙個區間

merge(r,a,i,i+c-1,n-1,comp_num,move_num);

else}}

void mergesort(elemtype r,int n,int &comp_num,int &move_num)

}void print(elemtype r,int n)

printf("%6d",r[i]);

}printf("\n");

}void producerandom(elemtype t[itemnum])

//折半查詢

int binsearch(elemtype r,elemtype k)   

return -1;

}void clear()      //自動清屏 

void showmenu()

void sort_search()

else

//clear();

break;

case '3':

if(randfl == 0)else

//clear();

break;

case '4':

if(randfl == 0)else

//clear();

break;

case'5':

if(randfl == 0)

else

break;

case '6':

if(sorted == 0)elseelse

}//clear();

break;

case '0':

printf("\n\t程式結束!\n");

break;

default:

printf("\n\t輸入錯誤,請重新輸入!\n");

}if(choice != '0')}}

int main()

資料結構之排序和查詢

快速排序是一種不穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動 該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。以乙個陣列作為示例...

資料結構實驗 查詢和排序

資料結構課的實驗,小組中給我分了這個。如果這篇東西榮幸的被你看到,而你也恰是華東理工大學計算機專業的,打算應付這個實驗的話,建議複製走後多少看看吧,說不定期末考試考到呢 直接貼 第乙個 編寫乙個程式輸出在順序表 中採用順序方法和折半方法查詢某個關鍵字的過程。include include using...

0514資料結構 遞迴 排序和查詢

1.漢諾塔演算法 實現這個演算法可以簡單分為三個步驟 1 把n 1個盤子由a 移到 b 2 把第n個盤子由 a移到 c 3 把n 1個盤子由b 移到 c 從這裡入手,在加上上面數學問題解法的分析,我們不難發現,移到的步數必定為奇數步 1 中間的一步是把最大的乙個盤子由a移到c上去 2 中間一步之上可...