C语言 排序 冒泡 选择

第一:冒泡

#include<stdio.h>
//冒泡排序

void swap (int *a, int *b)  //交换
{
    int tmp;

    tmp = *a;
    *a = *b;
    *b = tmp;
}

void print_array(int *v ,int len)  //打印
{
    int i;

    for( i = 0; i < len ; i++)
    {
      printf("%d  ",v[i]);
    }
    printf("\n");
}

void bubble_sort(int *v , int len)
{
     int i;
     int j;
     int times = 0;                            
 
     for (i = 0; i < len-1; i++)                    
     { 
         for(j = 0; j < len -1 -i; j++)
         {
             if(v[j] > v [j+1])
             {
             swap(v+j, v+j+1);           //swap(&v[j],&v[j+1])
             } 
             times ++;
         }
     print_array(v, len);
     }
     printf("%d\n",times);
}
         
int main()
{
   int a[] = {5,4,3,2,1};
   int len = sizeof(a)/sizeof(a[0]);


   print_array(a,len);
   bubble_sort(a,len);
   printf("**");
   print_array(a,len);

   return 0;
}

第二:选择

#include<stdio.h>
//冒泡排序

void swap (int *a, int *b)  //交换
{
    int tmp;

    tmp = *a;
    *a = *b;
    *b = tmp;
}

void print_array(int *v ,int len)  //打印
{
    int i;

    for( i = 0; i < len ; i++)
    {
      printf("%d  ",v[i]);
    }
    printf("\n");
}

void bubble_sort(int *v , int len)
{
     int i;
     int j;
     int times = 0;                            
 
     for (i = 0; i < len-1; i++)                    
     { 
         for(j = 0; j < len -1 -i; j++)
         {
             if(v[j] > v [j+1])
             {
             swap(v+j, v+j+1);           //swap(&v[j],&v[j+1])
             } 
             times ++;
         }
     print_array(v, len);
     }
     printf("%d\n",times);
}



void select_sort(int *v,int len)   //选择排序
{
    int max_value;  //最大值
    int max_pos;  //位置
    int i,j;

    for(i = 0; i < len-1;  i++)  //外层循环
    {
        max_value = v[0];
        max_pos = 0;

        for(j = 0; j < len - i; j++)
        {
            if(v[j] > max_value)
            {
                max_value = v[j];
                max_pos = j;
            }
        }
        swap(v + max_pos, v + len - i - 1);
        print_array(v,len);
    }
}
         
int main()
{
   int a[] = {52,44,3,23,15,32};
   int len = sizeof(a)/sizeof(a[0]);
   print_array(a,len);
   select_sort(a,len);
   print_array(a,len);

   return 0;
}

第三 :插入排序

#include<stdio.h>
//冒泡排序

void swap (int *a, int *b)  //交换
{
    int tmp;

    tmp = *a;
    *a = *b;
    *b = tmp;
}

void print_array(int *v ,int len)  //打印
{
    int i;

    for( i = 0; i < len ; i++)
    {
      printf("%d  ",v[i]);
    }
    printf("\n");
}

void bubble_sort(int *v , int len)   //冒泡排序
{
     int i;
     int j;
     int times = 0;                            
 
     for (i = 0; i < len-1; i++)                    
     { 
         for(j = 0; j < len -1 -i; j++)
         {
             if(v[j] > v [j+1])
             {
             swap(v+j, v+j+1);           //swap(&v[j],&v[j+1])
             } 
             times ++;
         }
     print_array(v, len);
     }
     printf("%d\n",times);
}



void select_sort(int *v,int len)   //选择排序
{
    int max_value;  //最大值
    int max_pos;  //位置
    int i,j;

    for(i = 0; i < len-1;  i++)  //外层循环
    {
        max_value = v[0];
        max_pos = 0;

        for(j = 0; j < len - i; j++)
        {
            if(v[j] > max_value)
            {
                max_value = v[j];
                max_pos = j;
            }
        }
        swap(v + max_pos, v + len - i - 1);
        print_array(v,len);
    }
} 


void insert_sort(int *v, int len)  // 插入排序
{
    int i,j;
    int value;

    for(i = 1 ; i < len ; i ++)
    {
        value = v[i];
        for(j = i ; j > 0 && value < v[j-1] ; j--)
        {
            v[j] = v[j -1];
        }
        v[j] = value;
        print_array(v, len);
    }
}
         
void insert_sort2(int *v, int len)  // 插入排序
{
    int i,j;
    int value;

    for(i = 1 ; i < len ; i ++)
    {
        value = v[i];
        for(j = i ; j > 0 ; j--)
        {
            if(value > v[j - 1])
            {
                break;
            }
            v[j] = v[j -1];
        }
        v[j] = value;
        print_array(v, len);
    }
}
         

int main()
{
   int a[] = {52,44,3,23,1,15,32};
   int len = sizeof(a)/sizeof(a[0]);
   print_array(a,len);
   insert_sort2(a,len);
   print_array(a,len);

   return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值