文章
2
粉丝
0
获赞
0
访问
991
/*
分析
1.因为是顺序表,所以可以考虑排序。
2.当数组中重复元素出现的次数超过n/2时,作为主元素。
3.所以可以先排序,然后定位到n/2位置。
4.从该位置往左计数,往右计数。
5.最后判断计数值是否大于n/2。
*/
int process(){//这个函数用来找主元素
int result = -1;//如果没找到返回-1
int A[n];//存放整数序列
int L,R;//分别记录A数组的第一个下标和最后一个下标
int X = A[n/2];//主元素的值
int count =0;//存储计数值
Q_sort(A,L,R);//进行快速排序
for(int i = n/2;i>=0;i--){//从主元素的位置开始从右往左找
if(X==A[i])count++;
}
for(int i = n/2+1;i<n;i++){//从主元素后一个位置开始左往右找
if(X==A[i])count++;
}
if(count>n/2)printf("%d",X);
else return result;
}
//编写快速排序算法
int partion(int A[],int L,int R){
int mid = A[L];//选取数组第一个元素作为枢轴
while(L<R){
while(A[R]>=mid&&L>R)R--;
A[L] = A[R];
...
登录后发布评论
暂无评论,来抢沙发