定义数组:{ 0,1,5,2,5,7,3,4,5,1,1,2,3,6,7,8,8
按升序排序
•重复数据删除
打印过程0 17
#include <stdio.h>
#define NUM 18
int main()
{
int a[NUM]={ 0,1,5,4,2,5,7,8,3,4,5,1,1,2,3,6,7,8 },b[NUM];
int i,j,temp;
printf("initial values:\t");
for( i=0; i<NUM; i++ )
{
printf("%d ",a[i]);
}
printf("\n\n");
for( i=0; i<NUM; i++ )
{
printf("process %d:\t",i);
for( j=0; j<NUM-1; j++)
{
if(a[j]>a[j+1])
{
temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;
}
printf("%d ",a[j]);
}
printf("%d\n",a[j]);
}
printf("\nsort values :\t");
for( i=0; i<NUM; i++ )
{
printf("%d ",a[i]);
}
printf("\n");
b[0]=a[0];
printf("Deduplication :\t%d ",b[0]);
for( i=1,j=0; i<NUM; i++ )
{
if(b[j]!=a[i])
{
b[++j]=a[i];
printf("%d ",b[j]);
}
}
printf("\n");
}
用的是插入排序,其实第9步已经整体有序,后面的9步又有什么意义?
楼主的问题是神马?没明白你什么问题
#include
#define N 10
int clear_duplication(int *p, int n, int *b)
{
int i, l = 0;
b[l]=p[0];
for(i=1; i< n; i++)
{
if(b[l] == p[i])
{
continue;
}else{
l++;
b[l]=p[i];
}
}
return ++l;
}
void print_arr(int *p, int n)
{
int i;
for(i=0; i<n; i++)
{
printf(" %d", p[i]);
}
putchar(10);
}
int main()
{
int a[N] = {0, 1, 5 , 2, 5, 7, 3, 4, 5, 1};
int i, temp,ret;
int step=0;
int b[N]= {0};
for(step=0; step < N; step++)
{
for(i=0; i< N; i++)
{
if(a[i] > a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
printf("process %d: ", step);
print_arr(a, 10);
}
printf("sort values: ");
print_arr(a, 10);
ret = clear_duplication(a,10,b);
printf("Deduplication: ");
print_arr(b, ret);
return 0;
}
你都写出来了,还要问什么????