首页 > 其他 > 详细

如何把一个整型数组中重复的数字去掉

时间:2014-03-12 03:28:35      阅读:442      评论:0      收藏:0      [点我收藏+]

思路分析:

首先通过快速排序,然后对排好序的数组设置主比较游标与辅比较游标,主比较游标初始化为下标0,辅比较游标则从下标1开始递增,挨个与第一个元素比较。在比较的过程中,若遇到相等的,则辅比较游标继续向后走,直到遇到不相等的,将主比较游标后移一位,此时主比较游标指向的元素值就是重复的,需要将其替换掉。然后将辅比较游标指向的元素值赋给主比较游标代表的元素值。重复这样的过程,直到所有的重复元素都比替换掉,此时主比较游标代表的就是去重后数组的最大下标,将其加一即为去重后数组的长度。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
int int_cmp(const void *a, const void *b)
{
    const int *ia = (const int *)a;
    const int *ib = (const int *)b;
    return *ia - *ib;
}
int unique(int *array, int number)
{
     
    int k = 0;
    for (int i = 1; i < number; i++)
    {
        if (array[k] != array[i])
        {
            k++;
            array[k] = array[i];
             
        }
    }
    return (k + 1);
}
int Unique_QuickSortMethod(int *arr, int elements)
{
    //C语言自带的排序函数
    qsort(arr, elements, sizeof(int), int_cmp);
    return unique(arr, elements);
}
int main()
{
    int array[5] = { 1, 2, 5, 4, 2 };
    int len = sizeof(array) / sizeof(array[0]);
    int size = Unique_QuickSortMethod(array, len);
    for (int i = 0; i < size; i++)
        printf("%d", array[i]);
    getchar();
    printf("\n");
}

  效果如图:

bubuko.com,布布扣

如何把一个整型数组中重复的数字去掉,布布扣,bubuko.com

如何把一个整型数组中重复的数字去掉

原文:http://www.cnblogs.com/cysolo/p/3594565.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!