【问题描述】
对一维数组中存储的数据首先进行从小到大的排序(冒泡、选择、插入、快速排序均可),然后删除序列中相同的数据,仅保留一个,最后输出数组中的数据。务必自行设计函数实现排序功能、删除功能、数组元素录入及个数统计功能、数组元素输出的功能等。
提示:删除时,可额外申请另一个数组存放结果,用len表示新的长度。
for(i=对原一维数组下标的依次循环,原长度为n)
{ 将a[i]放入新的数组b[len];len++;
for(j=从i+1开始向后循环)
{ 如果a[j]!=a[i],则跳出;否则继续i++,j++}
}
【输入形式】一些随机的数据,输入-1代表输入结束
【输出形式】删除后的结果,注意:最后一个数据后面有一个空格
【样例输入】9 9 0 32 2 78 2 8 5 3 1 9 0 2 6 6 7 -1
【样例输出】0 1 2 3 5 6 7 8 9 32 78
//6. 数组中相同数据的删除问题(一维数组、排序、循环)
//选择排序
#include <iostream>
#include<cstring>
using namespace std;
void sort(int arr[],int n)
{
for(int i=0;i<n-1;i++)
{
int min=i;
for(int j=i+1;j<n;j++)
{
if(arr[min]>arr[j]) min=j;
}
if(min!=i)
{
int t=arr[min];
arr[min]=arr[i];
arr[i]=t;
}
}
}
int Delete(int arr[],int n)//一个数组解决
{
int len=1;//需要是1 因为啊arr[0]一定被保存
for(int i=1;i<n;i++)
{
if(arr[i]!=arr[i-1])
{ arr[len++]=arr[i];
}
else
continue;
}
return len;
}
int main(){
int arr[40],n=-1;int k=0;
do
{
n++;
cin>>arr[n];
}while(arr[n]!=-1);
sort(arr,n);
for(int i=0;i<n;i++)
{
cout<<arr[i]<<" ";}
cout<<endl;
k=Delete(arr,n);
for(int i=0;i<k;i++)
cout<<arr[i]<<" ";
return 0;
}
效果
6. | 数组中相同数据的删除问题(一维数组、排序、循环) |
---|