#include<iostream>
using namespace std;
int min_arr(int arr[],int size);
void swap(int *,int *);
int main()
{
int arr[10]={31,2,55,3,77,12,89,98,43,34},loc;
int* arr1;
arr1 = &arr[0];
for(int i=0;i<10;i++)
{
for( int j=i;j<9;j++)
{
loc = min_arr(arr1,(10-i));
swap(&arr[loc],&arr[i]);
arr1++;
}
}
for(int i =0; i<10;i++)
cout<<arr[i]<<endl;
return 0;
}
int min_arr(int arr[],int size)
{
int k=0;
int temp=arr[0];
for(int i=1;i<size;i++)
{
if(arr[i]<temp)
{
temp=arr[i];
k=i;
}
}
return k;
}
void swap(int *a, int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
为什么这个选择在Cpp中排序代码,而不是提供所需的输出?请找到瑕疵!我们进行了两个函数来找到子数组的min。当我找到min时,我返回其索引并交换子数组的第一个位置和最小值元素!
答案 0 :(得分:1)
重新排列代码并添加一些调试行后,很容易找出错误:
更正,巧妙地缩进(使游览代码易于阅读非常重要)代码:
#include<iostream>
#define ARRAY_SIZE 10
using namespace std;
int min_arr(int arr[],int size);
void swap(int *,int *);
int main()
{
int arr[ARRAY_SIZE]={31,2,55,3,77,12,89,98,43,34},loc;
int* arr1;
arr1 = &arr[0];
for( int i = 0; i < ARRAY_SIZE; i++ )
{
//for( int j = i; j<ARRAY_SIZE-1; j++ )
{
loc = min_arr(arr1,(ARRAY_SIZE-i));
// for debug:
//std::cout << "min found at " << loc << std::endl;
swap(&arr[loc+i],&arr[i]);
// for debug:
//for( int i =0; i<ARRAY_SIZE; i++ )
// cout << arr[i] << " ";
//cout << std::endl;
arr1++;
}
}
for( int i =0; i<ARRAY_SIZE; i++ )
cout<<arr[i]<<endl;
return 0;
}
int min_arr( int arr[], int size )
{
int k=0;
int temp=arr[0];
for( int i=1; i<size; i++ )
{
if( arr[i] < temp )
{
temp=arr[i];
k=i;
}
}
return k;
}
void swap(int *a, int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
将输出:
2
3
12
31
34
43
55
77
89
98
答案 1 :(得分:0)
在您的版本中,您只需使用超出阵列映射区域的指针。
首先,调用函数min_arr。它需要数组,而不是指针:
loc=min_arr(arr,(10-i));
第二,功能本身。你总是从数组的开头开始,这就是已经排序的元素的原因。
int min_arr(int arr[],int size)
{
int k=10-size;
int temp=arr[k];
for(int i=k+1;i<10;i++)
{
if(arr[i]<temp)
{
temp=arr[i];
k=i;
}
}
return k;
}
答案 2 :(得分:-1)
for(int i=0;i<10;i++)
{
for( int j=i;j<9;j++) //shouldn't this be j < 10 ?
......