解题思路:1. 定义了一个函数  zhixing  ,用于执行快速排序中的一次划分操作,返回划分的基准位置。

2. 定义了函数  kp  ,用于对数组进行快速排序。

3. 在  main  函数中:

首先生成一个随机数种子。

输入一个整数  n  ,如果  n  为 0 则退出循环。

生成一个整数数组  p  ,并可以选择随机生成值或从输入获取值。

去除数组  p  中的重复元素,将不重复的元素存储在  temp  数组中,并记录不重复元素的个数  j  。

对  temp  数组进行快速排序。

输出不重复元素的个数和排序后的不重复元素。

注意事项:

参考代码:

#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

int zhixing(int *p,int low,int high){

    int i=low,j=high;

    int key=p[i];

    while(i<j){

        while(i<j&&p[j]>=key){

            j--;

        }

        if(i<j){

            p[i++]=p[j];

        }

        while(i<j&&p[i]<=key){

            i++;

        }

        if(i<j){

            p[j--]=p[i];

        }

    }

    p[i]=key;

    return i;

}

void kp(int *p,int low,int high){

    if(low<high){

        int key=zhixing(p,low,high);

        kp(p,low,key-1);

        kp(p,key+1,high);

    }

}

int main(){

    srand((int)time(0));

    int n;

    while(cin>>n){

        if(n==0){

            break;

        }

        int *v=new int[n];//看是否被访问过,被访问过 就置位1

        for(int i=0;i<n;i++){

            v[i]=0;

        }

        int p[n];

        for(int i=0;i<n;i++){

//            p[i]=rand()%1000+1;

//            cout<<p[i]<<" ";

              cin>>p[i];

        }

        for(int i=0;i<n;i++){

            if(v[i]==1){

                continue;

            }

            for(int j=i+1;j<n;j++){

                if(v[j]==0&&p[i]==p[j]){

                    v[j]=1;

                }

            }

        }

        int temp[n];

        int j=0;

        for(int i=0;i<n;i++){

            if(v[i]==1){

                continue;

            }else{

                temp[j++]=p[i];

            }

        }

        cout<<j<<endl;

        //快速排序

        kp(temp,0,j-1);

        for(int i=0;i<j;i++){

            cout<<temp[i]<<" ";

        }

        cout<<endl;

        cout<<endl;

    }

    return 0;

}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论