zoukankan      html  css  js  c++  java
  • 如何把一个整型数组中重复的数字去掉

    思路分析:

    首先通过快速排序,然后对排好序的数组设置主比较游标与辅比较游标,主比较游标初始化为下标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("
    ");
    }
    

      效果如图:

  • 相关阅读:
    XMU1349 xmu_1349
    字符串排序
    linux磁盘文件与目录管理系统(2)
    poj 3667 Hotel
    poj 3468 A Simple Problem with Integers
    linux文与目录管理
    Linux的磁盘与文件管理系统(1)
    hdu 1698 Just a Hook
    poj3225 Help with Intervals
    poj 2886Who Gets the Most Candies?
  • 原文地址:https://www.cnblogs.com/cysolo/p/3594565.html
Copyright © 2011-2022 走看看