C数组中冒泡排序和出现次数统计

本文介绍了如何使用冒泡排序算法对一维整型数组进行排序,并附加了元素出现次数的统计功能。通过示例代码展示了从大到小和从小到大的排序过程,以及统计数组中各元素的出现频率。

今天晚上看了一维数组,就在想素组中元素如何排序,网上看了些大佬们的思路和自己的一些理解,用冒泡排序法写了一个简单的素组中元素排序。
冒泡排序法:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,该元素列就排序完成。(百度百科的)
数组中元素出现次数统计是最后加的,还不完善,不过基本满足需求,之后再在基础上添加一些功能。

#include <stdio.h>  
 
void sort(int lels[],int count);
void sort1(int lels[],int count);
void Count(int lels[],int i,int count);

int main(void)
{
    int i = 0;
    int num;  //存储数组元素个数 
    printf("输入的数组元素的个数:\n");
    scanf("%d",&num);  //获取用户输入的数组元素的个数
    int array[num];
    printf("输入要排序的数:\n");
    for(i = 0;i < num;i++)
    {
	    scanf("%d",&array[i]);
	}
    
	sort1(array,num);  //进行排序
    printf("从大到小顺序:\n");
    for(i = 0;i < num;i++)
    { 
        printf("%-3d",array[i]);
	} 

    printf("\n");

	sort(array,num);  //进行排序
    printf("从小到大顺序:\n");
	for(i = 0;i < num;i++)
	{ 
        printf("%-3d",array[i]);	
    } 
    
    printf("\n");

    Count(array,0,num);//统计元素出现次数

    return 0;
}
 

void sort(int lels[],int count)
{
    int i,j;
    int temp;
    for(i = 0;i < count-1;i++){
        for(j = i+1; j < count;j++)
		{
            if(lels[i] > lels[j])    // 使用冒泡排序 
            {
				temp=lels[i];
                lels[i]=lels[j];
                lels[j]=temp;
			}
        }
    }
}

void sort1(int lels[],int count)
{
    int i,j;
    int temp;
    for(i = 0;i < count-1;i++){
        for(j = i+1; j < count;j++)
		{
            if(lels[i] < lels[j])    // 使用冒泡排序 
            {
				temp=lels[i];
                lels[i]=lels[j];
                lels[j]=temp;
			}
        }
    }
}

void Count(int lels[],int i,int count)
{
    int top=lels[i];
    int sum=0;
    while(lels[i]==top && i<count)
    {
        sum++;//出现次数
        i++;
    }
    if(lels[i]!=top)
    {
        printf("%d出现了:%d次\n",top,sum);
        if(i<count)
    {
        Count(lels,i,count);//递归调用
    }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值