首页 > 试题广场 >

KiKi去重整数并排序

[编程题]KiKi去重整数并排序
  • 热度指数:17663 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。

输入描述:
第一行,输入一个整数n,表示序列有n个整数。
第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。


输出描述:
去重并且从小到大排列的整数序列,整数之间用空格分隔。
示例1

输入

6
5 3 3 4 2 2

输出

2 3 4 5
#include <stdio.h>
#include <malloc.h>
#include <assert.h>

void QuickSort(int* left, int* right)
{
    assert(left && right);

    //只剩1个元素,无需继续排序
    //开始回归
    if (left >= right)
    {
        return;
    }

    int* i = left;
    int* j = right;
    int pivot = *left;

    while (i < j)
    {
        //j在小于pivot的地方停下来
        while (*j >= pivot && j > i)
        {
            j--;
        }
        *i = *j;

        //i在大于pivot的地方停下来
        while (*i <= pivot && i < j)
        {
            i++;
        }
        *j = *i;
    }
    //将基准元素pivot放入它该在的位置
    *j = pivot;

    QuickSort(left, i - 1);//i是上一轮已经处理好的元素,所以 -1 处理左边的元素
    QuickSort(j + 1, right);//j是上一轮已经处理好的元素,所以 +1 处理右边的元素
}

int main()
{
    int n = 0;
    int i = 0;
    int* p = NULL;

    scanf("%d", &n);

    //开辟空间
    p = (int*)malloc(sizeof(int) * n);
    if (!p)
    {
        perror("malloc:p");
        return 1;
    }

    //录入数列
    for (i = 0; i < n; i++)
    {
        scanf("%d", p + i);
    }

    //进行排序
    QuickSort(p, p + n - 1);

    //进行去重输出
    printf("%d ", *p);
    for (i = 1; i < n; i++)
    {
        if (*(p + i) == *(p + i - 1))
        {
            continue;
        }
        printf("%d ", *(p + i));
    }

    //释放空间
    free(p);
    p = NULL;

    return 0;
}

发表于 2024-03-20 13:46:52 回复(0)
#include<stdio.h>
int main() {
    int n = 0;
    int arr[1001] = {0};
    scanf("%d", &n);
    int i = 0 ;
    int m = 0;
    for (i = 0; i < n; i++) {
        scanf("%d", &m);
        arr[m] = m;
    }
    for (i = 0; i < 1001; i++) {
        if (arr[i] != 0)
            printf("%d ", arr[i]);
    }
    return 0;
}

发表于 2024-02-04 17:38:43 回复(0)
#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
    int n = 0;
    int arr[100] = {0};
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    for (int i = 0; i < n; i++)
    {
        int a = i;
        for (int y = 1; y < n-i; y++)
        {
            if (arr[a] == arr[a + y])
            {
                arr[a + y] = 0;
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        int j = 1;
        for (j = 0; j < n - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    for (int i = 0; i <= n; i++)
    {
        if (arr[i] != 0)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}
编辑于 2024-01-02 10:30:09 回复(1)
#include<stdio.h>

int main() 
{
    int n = 0;
    scanf("%d", &n);
    int arr[1001] = { 0 };
    int m = 0;
    for (int i = 0; i < n; i++) 
    {
        scanf("%d", &m);
        arr[m] = m;
    }
    for (int i = 0; i <= 1000; i++) 
    {
        if (arr[i] != 0) 
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}

编辑于 2023-12-17 16:47:27 回复(0)
#include <stdio.h>
#include <stdlib.h>

int main() {
    int a, b, tmp;
    int n, size = 0;
    int* arr = NULL;
    //申请n个字节动态空间
    while (arr == NULL)
    {
        scanf("%d", &n);
        arr = (int*)malloc(n * sizeof(int));
    }
    //输入数据,重复的不进行储存
    for (a = 0; a < n; a++)
    {
        scanf("%d", arr + size);
        size++;
        for (int i = 0; i < size-1; i++)
        {
            if (*(arr + size-1) == *(arr + i))
            {
                size--;
                break;
            }
        }
    }
    //进行排序
    for (a = 0; a < size-1; a++)
    {
        for (b = 0; b < size - a - 1; b++)
        {
            if (*(arr + b) > *(arr + b + 1))
            {
                tmp = *(arr + b);
                *(arr + b) = *(arr + b + 1);
                *(arr + b + 1) = tmp;
            }
        }
    }
    for (a = 0; a < size; a++)
    {
        printf("%d ", *(arr + a));
    }
    return 0;
}

发表于 2022-12-30 21:15:59 回复(0)
#include <stdio.h>

void bubble_sort(int arr[], int sz)//整型冒泡升序
{
    int i = 0;
    int j = 0;
    int tmp = 0;
    int flag = 1;
    for (i = 0; i < sz - 1; i++)
    {
        for (j = 0; j < sz - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
                flag = 0;
            }
        }
        if (flag == 1)
            {
                break;
            }
    }
}

int main()
{
    //输入
    int n = 0;
    int arr[1000] = {0};
    scanf("%d", &n);
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    
    //升序
    bubble_sort(arr, n);
    
    //不重复输出
    printf("%d ", arr[0]);
    for(i = 1; i < n; i++)
    {
        if (arr[i] != arr[i - 1])
        {
            printf("%d ", arr[i]);
        }
    }
    
    return 0;
}

发表于 2022-06-16 16:33:35 回复(0)
#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    int arr[1001] = {0};
    int i = 0;
    int tmp = 0;
    for(i = 0;i<n;i++)
    {
        scanf("%d",&tmp);
        arr[tmp] = tmp;
    }
    
    for(i = 0;i<1001;i++)
    {
        if(arr[i])
            printf("%d ",arr[i]);
    }
    return 0;
}

发表于 2022-05-19 19:54:16 回复(0)
#include<stdio.h>
#include<stdlib.h>
int cmp_int(int* _a, int* _b)
{
    int* a = (int*)_a;
    int* b = (int*)_b;
    return *a - *b;
}
int main()
{
    int n;
    int arr[300] = { 0 };
    int arr1[300] = { 0 };
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d/n", &arr[i]);
        for (int j = 0; j < i; j++)
        {
            if (i > 0 && arr[i] == arr[j])
            {
                arr[i] = 0;
            }
        }
    }
    qsort(arr, 300, 4, cmp_int);
    for (int i = 0; i < 300; i++)
    {
        if (arr[i] > 0)
        {
            printf("%d ", arr[i]);
        }
    }
    return 0;
}
发表于 2022-05-17 10:19:44 回复(0)
#include<stdio.h>
int int_com(const void*e1,const void*e2)
{
    return *(int*)e1-*(int*)e2;
}
int main()
{
    int k=0;
    scanf("%d",&k);
    int arr[10000]={0};
    for(int i=0;i<k;i++)
    {
        int p=0;
        scanf("%d",&p);
        arr[p]=p;
    }
    int sz=sizeof(arr)/sizeof(arr[0]);
    qsort(arr,sz,sizeof(arr[0]),int_com);
    int count =0;
    for(int i=0;i<10000;i++)
    {
        if(arr[i]!=0)
        {
            count=i;
            break;
        }       
       
    }
    for(int i=count;i<10000;i++)
        printf("%d ",arr[i]);
    return 0;
}//桶排序
发表于 2022-02-21 16:54:54 回复(0)
#include<stdio.h>
int main(void)
{
    int i,j,n;
    int flag,t,num[1000],k=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)//去重操作
    {
        flag=1;
        scanf("%d",&t);
        for(j=0;j<k;j++)//遍历已形成的数组
        {
            if(t==num[j])
            {
                flag=0;
                break;
            }
        }
        if(flag==1){//不存在此数则将其输入数组
            num[k]=t;
            k++;
        }
    }
    int min,temp;
    for(i=0;i<k-1;i++)//选择排序
    {
        min=i;
        for(j=i+1;j<k;j++)
        {
            if(num[j]<num[min])
                {
                min=j;
                }
        }
        if(min!=i)
        {
        temp=num[i];
        num[i]=num[min];
        num[min]=temp;
        }
    }
    for(i=0;i<k;i++)//遍历输出
    {
        printf("%d ",num[i]);
    }
    return 0;
}

发表于 2022-02-04 11:41:17 回复(0)
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[n];
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
    }//冒泡排序好
	for (int i = 0; i < n - 1; i++)
	{
		if (arr[i] == arr[i + 1])//查重
		{
			for (int j = i; j < n - 1; j++)
			{
				arr[j] = arr[j + 1];//移位
			  
			}
			i--;
			n--;//防止三个以上个连续的数字无法删除
		}
    }
	for (int i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

发表于 2022-01-08 16:53:36 回复(0)
#include<stdio.h>

void sort(int a[],int n)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
            if(a[i]>a[j])
            {
                int temp = a[i];
                a[i]=a[j];
                a[j]=temp;
            }
    }
}

int main(){
    int i,n,a[100]={0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d ",&a[i]);
    }
    sort(a,n);
    for(i=0;i<n-1;i++)
    {
        if(a[i]!=a[i+1])
            printf("%d ",a[i]);
    }
    printf("%d",a[n-1]);
    return 0;
}
发表于 2021-09-10 20:04:47 回复(0)
#include <stdio.h>

#define N 100
int main()
{
	int n;
	scanf("%d", &n);
	int arr[N];
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (int j = 0; j < n-1; j++)
	{
		if (arr[j] == -1)
			continue;
		for (int k = j+1; k < n; k++)
		{
			if (arr[j] == arr[k])
			{
				arr[k] = -1;
			}
		}
	}
	for (int i = 0; i < n-1; i++)
	{
		if (arr[i] == -1)
			continue;
		for (int j = 0; j < n-1; j++)
		{
			if (arr[j] > arr[j+1])
			{
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}		
		}
	}
	for (int i = 0; i < n; i++)
	{
		if (arr[i] != -1)
			printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}

发表于 2021-09-07 19:38:50 回复(0)
#include<stdio.h>

int main()
{
    int n;
    scanf("%d",&n);
    int arr[10000]={0};
    int m;
    while(~scanf("%d",&m)){
        arr[m]=m;
    }

    for(int i=0;i<10000;i++){
        if(arr[i]!=0){
            printf("%d ",arr[i]);
        }
    }
    return 0;
}

发表于 2021-08-29 14:57:42 回复(0)