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里面定义了一些在排序中没有用到的函数比如打印二维数组,求欧氏距离。