数组的应用:冒泡排序,选择排序,交换排序

冒泡升序:冒泡排序是从下标0 开始依次往后比较 ,最大的排到最后,接着第二轮也是从0 开始 一直到倒数第二,依次类推,外长成循环,执行n-1 次,内层循环每执行一次就减少一次所以是n-i ,但是n-i  这个值超过范围了,需要在减一

#include <stdio.h>
#include <stdlib.h>
#include "Swap.h"
//冒泡排序
void Bubble_Sort(int n,int nums[])
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-i-1;j++)
        {
            if (nums[j]>nums[j+1])
            {
               Swap(&nums[j],&nums[j+1]);
            }
        }

    }
}

选择升序:就是按照下标位置,最后一个下标是最大值,倒数第二个就是次大值,依次类推。所以外层循环也是n-1次,内层循环随着位置被确定 ,需要的次数也减少所以是 n-1-i 次

#include <stdio.h>
#include <stdlib.h>
#include "Swap.h"
//选择排序
void Selection_Sort(int n,int nums[])
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if (nums[j]>nums[n-1-i])
            {
               Swap(&nums[j],&nums[n-1-i]);
            }
        }

    }
}

交换排序:从下标第一个开始和后面的做比较,大的话就交换,第一轮就会数值最小的就在第一个,依次类推,第二轮就是第二小,没进行一轮内层循环就会少一次。

#include <stdio.h>
#include <stdlib.h>
#include "Swap.h"
//交换排序
 void Jiaohuan_Sort(int n,int nums[])
{
        int j;
    for(int i=0;i<n-1;i++)
    {
        for( j=i+1;j<n;j++)
        {
            if (nums[i]>nums[j])
            {
            Swap(&nums[i],&nums[j]);
            }

        }

    }
}

子程序 交换:

void Swap(int* a,int *b)
{
      int t;
      t=*a;
      *a=*b;
      *b=t;
}

头文件:

#ifndef SWAP_H_INCLUDED
#define SWAP_H_INCLUDED
void Swap(int *a,int* b);
void Bubble_Sort(int n,int nums[]);
void Selection_Sort(int n,int nums[]);
void Jiaohuan_Sort(int n,int nums[]);
#endif // SWAP_H_INCLUDED

主函数:

#include <stdio.h>
#include <stdlib.h>
#include "Swap.h"

int main()
{

    int a[10]={58,34,11,87,61,78,45,0,12,19};
    int b[10]={58,34,11,87,61,78,45,0,12,19};
    int c[10]={58,34,11,87,61,78,45,0,12,19};

    printf("选择排序法\n");
    Selection_Sort(10,a);
    for(int i=0;i<10;i++)
    printf("%d\t",a[i]);
    printf("\n");

    printf("冒泡排序法\n");
    Bubble_Sort(10,b);
    for(int i=0;i<10;i++)
    printf("%d\t",b[i]);
    printf("\n");

    printf("交换排序法\n");
    Jiaohuan_Sort(10,c);
    for(int i=0;i<10;i++)
    printf("%d\t",c[i]);
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值