天天看点

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

冒泡升序:冒泡排序是从下标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;
}