如何把一個整型數組中重復的數字去掉


思路分析:

首先通過快速排序,然后對排好序的數組設置主比較游標與輔比較游標,主比較游標初始化為下標0,輔比較游標則從下標1開始遞增,挨個與第一個元素比較。在比較的過程中,若遇到相等的,則輔比較游標繼續向后走,直到遇到不相等的,將主比較游標后移一位,此時主比較游標指向的元素值就是重復的,需要將其替換掉。然后將輔比較游標指向的元素值賦給主比較游標代表的元素值。重復這樣的過程,直到所有的重復元素都比替換掉,此時主比較游標代表的就是去重后數組的最大下標,將其加一即為去重后數組的長度。

代碼如下:

#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");
}

  效果如圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM