思路分析:
首先通过快速排序,然后对排好序的数组设置主比较游标与辅比较游标,主比较游标初始化为下标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
原文:http://www.cnblogs.com/cysolo/p/3594565.html