排序

insertsort(int a[],int n)                        /*直接插入排序*/
{
    int i,j;
    for(i=2;i<=n;i++)
    {
        a[0] = a[i];
        j = i - 1;
        while(j>0 && a[0]>a[j])                    /*改變判斷條件,實現從大到小地排列*/
            a[j+1] = a[j--];
        a[j+1] = a[0];                        /*將元素a[0]插入指定位置*/
    }
}
 
void selectsort(int k[],int n)                /*選擇排序*/
{
    int i,j,max;
    for(i=1;i<=n-1;i++){
         max = i;
         for(j=i+1;j<=n;j++)            /*在後n-i+1個元素中找到最小的元素位置*/
         if(k[j] > k[max])
            max = j;                /*用min記錄下最小元素的位置*/
           if(max != i){                /*若是最小的元素不位於後n-i+1個元素檔第1個*/
                k[0] = k[max] ;
                k[max] = k[i];            /*元素的交換*/
                k[i] = k[0];
            }
         }
}
 
 
void bubblesort(int k[],int n){                    /*冒泡排序*/
    int i,j,tmp ,flag = 1;
    for(i=1;i<=n-1 && flag == 1;i++){                /*執行n-1趟排序*/
 
        flag = 0;
        for(j=1;j<=n-i;j++){
            if(k[j]<k[j+1]){                    /*數據交換*/
                tmp = k[j+1];
                k[j+1] = k[j];
                k[j] = tmp;
                flag = 1;
            }
           }
        }
}
 
void shellsort(int k[],int n) /*希爾排序*/
{
    int i, j, flag ,gap = n;
    int tmp;
    while(gap > 1){
    gap = gap/2;                /*增量縮小,每次減半*/
    do{                        /*子序列應用冒泡排序*/
        flag = 0;
        for(i=1;i<=n-gap;i++){
            j = i + gap;
            if(k[i]<k[j]){
                tmp = k[i];
                k[i] = k[j];
                k[j] = tmp;
                flag = 1;
                }
            }
         }while(flag !=0);
    }
}

摘自:開源中國shell

相關文章
相關標籤/搜索