问题:编写一个程序实现筛除数组中重复元素功能。
算法思路:基于简单的想法,先把数组排序,然后扫描整个数组跳过重复的元素。算法的效率取决于排序算法的效率。
算法实现:
//
// main.cpp
// MyProjectForCPP
//
// Created by labuser on 11/2/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#include <iostream>
void sort(int[],int);
void unique(int x[],int n,int *number){
int i;
sort(x, n);
*number=1;
for(i=1;i<n;++i){
if (x[i]!=x[i-1]) {
x[(*number)++] = x[i];
}
}
}
void sort(int x[],int n){
int i,j,temp;
for (i=0; i<n; ++i) {
for (j=i+1; j<n; ++j) {
if (x[i]>x[j]) {
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
}
}
int main (int argc, const char * argv[])
{
int x[] = {100, 37, 100, 37, 15, 111,
37, 15, 111, 98, 100,98 };
int n = sizeof(x)/sizeof(int);
int number;
int i;
printf("\nElement Uniquness Program");
printf("\n=========================");
printf("\n\nOriginal Array :");
for (i=0; i<n; i++) {
printf("%4d",x[i]);
}
unique(x, n, &number);
printf("\n\nProcessed Array :");
for (i=0; i<number; i++) {
printf("%4d",x[i]);
}
printf("\n\n");
return 0;
}
运行结果:
Element Uniquness Program
=========================
Original Array : 100 37 100 37 15 111 37 15 111 98 100 98
Processed Array : 15 37 98 100 111
Program ended with exit code: 0
分享到:
相关推荐
1. 初始化一个长度为100的数组,数组中的每个元素表示对应的自然数。 2. 从数组的第二个元素(即2)开始遍历: - 如果当前元素不为0,则保留该数作为素数; - 将该数之后所有能够被它整除的数标记为0,表示这些数...
- **冒泡排序**:这是一种简单的排序算法,通过重复遍历数组比较相邻元素并交换位置来实现排序。在VB中,可以使用For和If语句实现。 - **选择排序**:每次从未排序的部分找到最小(或最大)元素,然后将其与第一个...
1. 创建一个布尔数组,长度为待检查的数n,所有元素初始化为`true`。数组中的索引代表数字,如数组下标i对应数字i。 2. 从2开始遍历数组,如果2是素数,就标记2的倍数(即下标为2, 4, 6, ...)为`false`,因为它们...
- 从数组中选择一个素数`p`,删除所有能被`p`整除的数。 - 重复上述步骤,直到所有素数都被筛选出来。 2. **特点**: - 相比布尔数组方法,这种方法更直观,但效率较低。 3. **适用场景**: - 对于数据规模不是...
1. **初始化**:创建一个大小为n的布尔数组,将所有元素标记为true,表示每个数都可能是质数。 2. **筛除非质数**: - 从最小的质数2开始,将其所有倍数标记为false。 - 移动到下一个未被标记为false的数,重复...