程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 指針-c++降序排列問題,求解!

指針-c++降序排列問題,求解!

編輯:編程解疑
c++降序排列問題,求解!

題目:
用指針與數組作為函數參數,按如下四種情況用擂台法對一維實型數組a[10]進行降序排序。
函數的實參為數組名,形參為數組。
函數的實參為數組名,形參為指針變量,。
函數的實參為指針變量,形參為數組。
函數的實參為指針變量,形參為指針變量。
實驗數據:10,25,90,80,70,35,65,40,55,5

#include <iostream>
using namespace std;
void Sort1(int a1[],int n)
{
 int i,j;
 int temp,max;

 for(i=0;i<n-1;i++){
  max=i;
  for(j=i;j<n;j++){
   if(a1[max] < a1[j])
    max=j;
  }
  temp=a1[max];
  a1[max]=a1[i];
  a1[i]=temp;
 }

 for(i=0;i<n;i++)
  cout<<a1[i]<<" ";
 cout<<endl;
}

int *Sort2(int *pa,int n)
{
 int i,j;
 int temp,max;

 for(i=0;i<n-1;i++){
  max=i;
  for(j=0;j<n;j++){
   if(*(pa+max) < *(pa+j))
    max=j;
  }
  temp=*(pa+max);
  *(pa+max)=*(pa+j);
  *(pa+j)=temp;
 }

 return pa;
}
int main()
{
 int a[]={10,25,90,80,70,35,65,40,55,5};
 int *sort_2,*sort_4;
 int *p=a;
 int t;

 Sort1(a,10);

 sort_2=Sort2(a,10);
 for(t=0;t<10;t++)
  cout<<*(sort_2+t)<<" ";
 cout<<endl;

 Sort1(p,10);

 sort_4=Sort2(p,10);
 for(t=0;t<10;t++)
  cout<<*(sort_4+t)<<" ";
 cout<<endl;

 return 0;
}```
請問錯在哪裡?麻煩指出錯誤點,萬分謝謝!!!!!!!!!!!!!!!

最佳回答:


有兩個問題吧:
1.sort2函數裡面的

   temp=*(pa+max);
  *(pa+max)=*(pa+j);
  *(pa+j)=temp;

這裡的j要改為i,因為j的值是10,越界了。

2.在sort2裡面,第二個for循環的j要從j=i+1開始,而不是0,所以改成:

 for(j=i+1;j<n;j++){
   if(*(pa+max) < *(pa+j))
    max=j;
  }

在sort1裡面也需要將 j=i改為j=i+1

修改之後的代碼如下:


#include <iostream>
using namespace std;
void Sort1(int a1[],int n)
{
    int i,j;
    int temp,max;

    for(i=0;i<n-1;i++){
        max=i;
        for(j=i+1;j<n;j++){
            if(a1[max] < a1[j])
                max=j;
        }
        temp=a1[max];
        a1[max]=a1[i];
        a1[i]=temp;
    }

    for(i=0;i<n;i++)
        cout<<a1[i]<<" ";
    cout<<endl;
}

int *Sort2(int *pa,int n)
{
    int i,j;
    int temp,max;

    for(i=0;i<n-1;i++){

        max=i;
        for(j=i+1;j<n;j++){
            if(*(pa+max) < *(pa+j))
                max=j;
        }
        temp=*(pa+max);
        *(pa+max)=*(pa+i);
        *(pa+i)=temp;
    }

    return pa;
}
int main()
{
    int a[]={10,25,90,80,70,35,65,40,55,5};
    int *sort_2,*sort_4;
    int *p=a;
    int t;

    Sort1(a,10);

    sort_2=Sort2(a,10);
    for(t=0;t<10;t++)
        cout<<*(sort_2+t)<<" ";
    cout<<endl;

    Sort1(p,10);

    sort_4=Sort2(p,10);
    for(t=0;t<10;t++)
        cout<<*(sort_4+t)<<" ";
    cout<<endl;

    return 0;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved