ソートアルゴリズム(C実装)について


2019.9.21-2019.9.23 8個の並べ替えアルゴリズムをレビューして再学習し、理解した後に自分で一度実現し、すべてテストに合格した(手動でQQQQをテストする)
泡の順序付け:隣接する2つの比較、大きい数の後沈
≪ソートの選択|Select Sort|oem_src≫:最小の要素を選択して最前面に配置し、「≪現在の最小の要素|Current Minimum Elements|oem_src≫」を比較するたびに、前にソートされたシーケンスの最後に配置します.
≪ソートの挿入|Insert Sort|Planning≫:2番目の要素から、前の要素と比較し続けます.この要素が小さい場合は、「≪現在の先頭|Current Top|Planning≫」に挿入されます.
ヒルソート:間隔を予め設定し、各間隔内で挿入ソートを使用します.
クイックソート:ダブルポインタ.flagは三者で取り、最もrightの場所に置く.左右のポインタが指す要素をflagと比較してleft++,right--または交換する
ヒープの順序付け:ヒープを構築し、最大はヒープの上にあり、その後、最後の要素をヒープの上に置くたびに、現在の最大をヒープの上に置き換えます.
集計ソート:思想を分割し、各要素が1つになるまでブロックを分割し、次に1つずつ比較します.
基数の順序付け:まず数位、更に10位、ある1位の同じ大きさのを同じ“桶”の中に置いて、それからそれぞれの桶は比較して、先に数位、更に10位、毎回比較した後に相対的な位置を更新して、このように押します
PS.配列要素の交換については、値ではなくアドレスを送信します.swap関数を定義するときは、int swap(int&a,int&b)で、その内部およびメイン関数での呼び出しは通常の形式と同じです.もちろん、私が次のコードで実装したように、swap(int*a、int*b)でもいいですが、この場合、swap内部や主関数呼び出し時の表現が少し異なり、少し面倒です.
#include 
#include 
#include 
#include 
#include 
int n;//    ,   ....

void swap(int*a,int*b){//      ,    !!!
    int c=*a;
    *a=*b;
    *b=c;
}


int jishu_getNumLength(int maxvalue){
    int i=0;
    while(maxvalue>0){
        maxvalue=maxvalue/10;
        i++;
    }
    return i;
}

int jishu_getMaxValue(int a[]){
    int temp=0;
    for(int i=0;ia[j]){
            b[k]=a[j];
            j++;
            k++;
        }
    }
    while(i<=mid){
        b[k]=a[i];
        k++;
        i++;
    }
    while(j<=right){
        b[k]=a[j];
        k++;
        j++;
    }
}

void merge_sort(int a[],int b[],int left,int right){

    if(right>left){
        int mid=left+(right-left)/2;
        merge_sort(a,b,left,mid);
        merge_sort(a,b,mid+1,right);
        merge(a,b,left,mid,right);

        for(int i=left;i<=right;i++){
            a[i]=b[i];
        }
    }


}


void heapadjust(int a[],int index,int length){
    int leftchild=index*2+1;
    int rightchild=index*2+2;
    int cur=index;

    if(a[leftchild]>a[cur]&&leftchilda[cur]&&rightchild=0;i--){
        heapadjust(a,i,length);
    }
}

void heapsort(int a[],int length){
    int len=length;
    buildheap(a,len);
    for(int i=len-1;i>0;i--){//i        
        swap(&a[0],&a[i]);
        len--;
        heapadjust(a,0,len);
    }
}

int quick_findmidkey(int a[],int left,int right){
    int mid=left+(right-left)/2;


    if((mid<=left&&mid>=right)||(mid>=left&&mid<=right)){
        return mid;
    }
    else if((mid>=left&&left>=right)||(mid<=left&&left<=right)){
        return left;
    }
    else if((mid>=right&&right>=left)||(mid<=right&&right<=left)){
        return right;
    }
    return 0;
}
int quick_part(int a[],int left,int right){//     
    if(left=key&&lefta[j+1]){

                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
                flag=false;
            }
        }
        if(flag==true){
            break;
        }

    }
}

void select(int a[]){//    
    for(int i=0;ia[j]){
                min=j;
            }
        }

        temp=a[i];
        a[i]=a[min];
        a[min]=temp;

    }

}

void insertsort(int a[]){//    ,           ,       
    for(int i=1;i0){
            a[j]=a[j-1];
            j--;
        }

        if(j!=i){
            a[j]=temp;
        }
    }

}

void xier(int a[]){
    int gap=1;

    while(gap0){

        for(int i=gap;i=0){
                a[j+gap]=a[j];
                j=j-gap;
            }

            a[j+gap]=temp;
        }
            gap=gap/3;
    }
}


int main()
{
    int beforesort[10000];
    int result[100000];
    scanf("%d",&n);
    int i=0;

    while(i