解题思路: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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复