当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C中排序(代码实例)

C中排序(代码实例)

2018年09月30日  | 移动技术网IT编程  | 我要评论

恩来,刘贤珍,拳皇2009

c中排序(代码实例)

/*********************冒泡排序********************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<math.h>
#include<sys/types.h>

void maopao(int *a,int n)
{
    int i,j,temp;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(a[j]>a[j+1])
            {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}
void show(int *a,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%-3d",a[i]);
    }
    printf("\n");
}
int main (void)
{
    int a[10] = {12,23,10,14,8,22,43,1,3,0}; 
    maopao(a,10);
    show(a,10);

    return 0;
}
/***********************************选择排序***********************************/

void choise(int *a,int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(a[i]>a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
}
void show(int *a,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%-3d",a[i]);
    }
    printf("\n");
}
int main (void)
{
    int a[10] = {10,14,8,22,94,95,4,5,6,1}; 
    choise(a,10);
    show(a,10);

   return 0;
}

/*******************************************插入排序********************************************/

/*include插入法
 * 插 入法是一种比较直观的排序方法。
 *  它首先把数组头两个元素排好序,
 *  再依次把后面的元素插入适当的位置。
 *   把数组元素插完也就完成了排序。*/

void insert(int *a,int n)
{
    int i,j,temp;
    for(i=1;i<n;i++)
    {
        temp = a[i];/*temp为要插入的元素*/ 
        j = i - 1;
        /*从a[i-1]开始找比a[i]小的数,同时把数组元素向后移*/
        while(j>=0 && temp<a[j])
        {
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = temp;/*插入*/ 
    }
}

void show(int *a,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%-3d",a[i]);
    }
    printf("\n");
}
int main (void)
{
    int a[10] = {12,2,4,67,32,45,22,11,90,15}; 
    insert(a,10);
    show(a,10);

    return 0;
}

/**************************************快速排序**************************************************/

*        快速排序
 * 快速法定义了三个参数,
 * (数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j)
 * 它首先选一个数组元素(一般为a[(i+j)/2],即中间元素)作为参照,
 * 把比它小的元素放到它的左边,比它大的放在右边。
 * 然后运用递归,在将它左,右两个子数组排序,
 * 最后完成整个数组的排序。
 * */
void quick(int *a,int i,int j) 
{ 
    int m,n,temp; 
    int k; 
    m=i; 
    n=j; 
    k=a[(i+j)/2]; /*选取的参照*/ 
    while(m<=n)
    { 
        while(a[m]<k&&m<j) m++; /* 从左到右找比k大的元素*/ 
        while(a[n]>k&&n>i) n--; /* 从右到左找比k小的元素*/ 
        if(m<=n) { /*若找到且满足条件,则交换*/ 
                  temp=a[m]; 
                  a[m]=a[n]; 
                  a[n]=temp; 
                  m++; 
                  n--; 
                 } 
    } 
    if(m<j) quick(a,m,j); /*运用递归*/ 
    if(n>i) quick(a,i,n); 
} 
int show(int *a,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%-3d",a[i]);
    }
    printf("\n");
    return 0;
}
int main (void)
{
    int a[10] = {23,13,1,4,2,56,78,22,10,3};
    quick(a,0,9);
    show(a,10);

    return 0;
}
/*********************************************shell排序***********************************************************/


/*shell法
 shell法是一个叫 shell 的美国人与1969年发明的。
它首先把相距k(k>=1)的那几个元素排好序,再缩小k值(一般取其一半) 
 再排序,直到k=1时完成排序。下面让我们来分析其代码
 */
void shell(int *a,int n)
{
    int i,j,k,temp;
    k = n/2;
    while(k>=1)
    { 
        for(i=k;i<n;i++) { 
            temp = a[i]; 
            j=i-k; 
            while(j>=0 && temp<a[j]) { 
                a[j+k]=a[j]; 
                j-=k; 
            } 
            a[j+k]=temp; 
        } 
        k/=2; /*缩小间距值*/ 
    } 
}
void show(int *a,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%-3d",a[i]);
    }
    printf("\n");
}
int main (void)
{
    int a[10] = {12,19,95,94,10,14,8,22,1,4};
    shell(a,10);
    show(a,10);

    return 0;
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网