王道数据结构代码大题-2013统考真题暴力解

int Find_Main(SqList l1) {
  // 1.初始化一个全为0的数组
  int temp[list.length] = {0};

  // 2.新数组的下标对应元素值,值对应元素个数
  for (int i = 0; i < l1.length; i++) {
    temp[l1.data[i]]++;
  }

  // 3.遍历找出主元素
  for (int i = 0; i < temp.length; i++) {
    if (temp[i] > l1.length / 2 ) 
      return i;
  }
  return -1;
}

方法一:遍历初始数组(顺序表),新建数组temp,将初始数组的数据与temp数组下标一一对应,并++,最后遍历temp数组即可。

方法二:将初始数组快速排序,然后以排好序的数组的中间元素作为待定主元素,并向左和向右查找与待定主元素相等的数据个数,若其个数>n/2,则是主元素,否则不是主元素

方法二代码如下:

int huafen(int A[],int low,int high){
    int mid=A[low];
    while(low<high){
        while(low<high&&A[high]>=mid) high--;
        A[low]=A[high];
        while(low<high&&A[low]<=mid) low++;
        A[high]=A[low];
}
         A[low]=mid;
         return low;
}
//快排实现
int Qsort(int A[],int low,int high){
    if(low<high){
        int pirvo=huafen(A,low,high);
        Qsort(A,low,pirvo-1);
        Qsort(A,pirvo+1,high);
}
int Find(int A[]){
    Qsort(A,0,n-1);
    int mid=A[n/2];
    int count=0;
    for(int i=n/2-1,i>=0;i--){
        if(A[i]==mid)
            count++;}
    for(int i=n/2,i<n;i++)}
        if(A[i]==mid)
            count++;}
    if(count>n/2) 
        return mid;
    else 
        return -1;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值