//氣泡排序
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 中間一步之上可...