c语言 实现排序(选择排序和冒泡排序)

main.c
#include<stdio.h>
#include"array.h"
#include<stdlib.h>
#include<ctype.h>
int main()
{
	char ch;
	int i = 0,n=1;
	float *a;
	int len =0;
	a = (float *)malloc(n*sizeof(float));
	printf("输入任意长度数组:\n");
	while((ch=getchar())!='\n')
	{
		if(isdigit(ch))
		{
			ungetc(ch,stdin);
			scanf("%f",&a[i++]);
			realloc(a,++n*sizeof(float));
			len++;
		}
	}
	

	printf("排序前的数组:");
	print_1Darray(a,len);
	
	printf("选择排序后的数组:");
	selection_sort(a,len);
	print_1Darray(a,len);
	
	float *b =a;
	printf("冒泡排序后的数组:");
	bubble_sort(b,len);
	print_1Darray(b,len);	
	

	
	return 0;
}
array.h
void selection_sort(float *array , int len);
void bubble_sort(float *array , int len);
void print_1Darray(float *array,int len);
void print_2Darray(float *array,int N,int M);
void swap(float *a,float *b);
float distance(int dimension,float *av,float *bv);
array.c
#include<stdio.h>
#include"array.h"
#include<math.h>
void print_1Darray(float *array,int len)
{
	//array是需要打印的数组,len为该数组的长度 
	int i;
	printf("[");
	for(i=0;i<len;i++)
	{
		printf("%.2f",array[i]);
		printf("%c",i<len-1?' ':']');
	}
	printf("\n");
}

void print_2Darray(float *array,int N , int M)
{
	int i=0,j=0;
	for(i=0;i<N;i++)
	{
		for(j=0;j<M;j++)
		{
			printf("%.2f%c",array[i*M+j],j==M-1?'\n':' ');
		}
	}
}


void selection_sort(float *array,int len)
{
	int i,j;
	for(i=0;i<len-1;i++)
	{
		for(j=i+1;j<len;j++)
		{
			if(array[j]>array[i])
			{
				swap(&array[j],&array[i]);
			}
		}
	}
}

void bubble_sort(float *array,int len)
{
	int i,j;
	for(i=0;i<len-1;i++)
	{
		for(j=0;j<len-1-i;j++)
		{
			if(array[j+1]>array[j]) swap(&array[j+1],&array[j]);
		}
	}
}

void swap(float *a,float *b)
{
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
	
}

float distance(int dim,float *av, float *bv)
{
	int i,dist=0;
	for(i=0;i<dim;i++)
	{
		dist += pow(av[i]-bv[i],2);
	}
	return sqrt(dist);
}

array.c里面定义了一些在排序中没有用到的函数比如打印二维数组,求欧氏距离。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值