很垃圾的快排加

實驗說明

實驗名稱:蠻力與分治算法應用

實驗課程:一

所屬院系:計數院軟件工程

所屬課程:算法設計與分析

課程目的:

蠻力法就是主要是一種簡單直接解決問題的方法,例如:順序和窮舉查找、字符匹配、選擇和冒泡排序等,分治法主要是將複雜的問題分解成一系列較小的問題,而後合併這些小問題的解。算法

實驗要求:

應用蠻力法和分治策略設計問題求解算法,並編寫程序,解決實際問題。本實驗就是應用蠻力法和分治法,設計並實現選擇排序,合併排序,或快速排序程序。
要求學生能理解蠻力法和分治法的基本原理,解決實際問題,實現上述應用程序。並給出足夠的測試實例,分析實驗結果,並證實算法的正確性。數組

實驗內容

分治算法
分治算法是一個很著名的算法。將一個問題一分爲二,再從兩份中去分。從而減小運算的次數,也提升了算法的效率。
(1) 將一個問題劃分爲多個子問題:子問題規模最好相同;
(2) 對這些子問題的問題求解,通常使用遞歸的方法,固然問題規模很小的時候也能夠用另外的算法;
(3) 在問題須要的時候合併子問題的解,從而獲得原始問題的答案;測試

實驗代碼


#include<stdio.h>
typedef int Elemtype ;
#define MAN 10
void operation(Elemtype *T);
void swap(Elemtype *T,int i,int j){
    int tum;
    tum = T[i];
    T[i] = T[j];
    T[j] = tum;
}
int HoarePartition(Elemtype *T,int l,int r){
    int i=l,j=r;
    int p = T[l];
    while(j>i){
        for(;i<=r;i++){
            if(T[i]>p)break;
        }
        for(;j>l;j--){
            //printf("qqqqff%d,%d,i:%d ",j,T[j],i);
            if (T[j]<p)break; 
        }
        swap(T,i,j);
    }
    swap(T,i,j);
    swap(T,l,j);
    return j;
    
}
void Getlevel(Elemtype *T,int l,int r){
    if((r-l)<=1){
        return;
    }
    int level;
    operation(T);//getchar();
    level = HoarePartition(T,l,r);
    //printf("j=%d;T[j]=%d,l=%d,r=%d",level,T[level],l,r);
    //getchar();
    Getlevel(T,l,level);
    Getlevel(T,level+1,r);
    
}
void operation(Elemtype *T){
    int i= 0;
    for(i= 0;i<10;i++){
        printf("%d ",T[i]);
        }
    //printf("%d,",T[10]);
    printf("i=%d\n",--i);
}
int main(){
    int T[MAN] = {5,11,2,6,8,9,4,22,14,7};
    operation(T);
    Getlevel(T,0,MAN-1);
    operation(T);
    return 0;
}
  • 實驗結果及調試過程:

    測試數組爲:int T[MAN] = {5,11,2,6,8,9,4,22,14,7};
    下面爲每次遞歸的步驟過程

蠻力算法:簡單直接

程序代碼:設計

#include<stdio.h>
//冒泡排序 
void swap(int *T,int l){
    int t;
    t = T[l] ;
    T[l] = T[l+1];
    T[l+1] = t;
}
void operation(int T[]){
    for(int i = 0;i<10;i++)
        printf("%d ",T[i]);
}
int main(){
    int T[] = {1,5,6,8,2,11,66,4,2,9};
    
    for(int i=0;i<10;i++)
        for(int j=0;j<9-i;j++){
            if(T[j]>T[j+1]){
                swap(T,j);
            }
        }
    operation(T); 
    return 0 ;
}

測試數據:int T[] = {1,5,6,8,2,11,66,4,2,9};
實驗結果:
調試

相關文章
相關標籤/搜索