初级 C++ 学习者来求教,编程中排序题目遇到的有关问题,求解答

初级 C++ 学习者来求教,编程中排序题目遇到的问题,求解答
题目是用选择法对10个整数进行由小到大排序。

我的编程是:
#include 
using namespace std;
int main()
{
void select_sort(int array[], int n);
int a[10], i;
cout << "输入原始数组:" << endl;
for (i = 0; i < 10; i++)
cin >> a[i];
cout << endl;
select_sort(a, 10);
cout << "排序好的数组:" << endl;
for (i = 0; i < 10; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
void select_sort(int array[], int n)
{
int i, j, t;
for (i = 0; i < 10; i++)
{
for (j = i + 1; j < n;j++)
if (array[j] < array[i])
t = array[j]; array[j] = array[i]; array[i] = t;

}
}

参考答案给的编程:
#include 
using namespace std;
int main()
{
void select_sort(int array[], int n);
int a[10], i;
cout << "输入原始数组:" << endl;
for (i = 0; i < 10; i++)
cin >> a[i];
cout << endl;
select_sort(a, 10);
cout << "排序好的数组:" << endl;
for (i = 0; i < 10; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
void select_sort(int array[], int n)
{
int i, j,k, t;
for (i = 0; i < 10; i++)
{
k = i;
for (j = i + 1; j < n;j++)
if (array[j] < array[i])
k = j;
t = array[k]; array[k] = array[i]; array[i] = t;

}
}

 不同点在于红色标记的地方。我的编程没有设置变量K,但是答案设置了。我个人觉得有没有K都无所谓啊,但是实际运行我的是错误的,答案是正确的。我很想知道这个K起到什么作用?为什么非要弄个K呢?求大神的详细解答啊
------解决思路----------------------
问题出在花括号上面,你这样写:
if (array[j] < array[i]){
    t = array[j]; array[j] = array[i]; array[i] = t;
}


因为if执行的是判断语句之后的语块,如果你没有用花括号,那就默认之后一句为执行体。
标准答案相当于if判断之后,就把位置赋值给k,而你的则是判断之后只把array[j]赋值给t,等于你的交换数值三句被拆成了两个部分,有时候执行两个部分,有时候只执行最后一部分的那两句。
------解决思路----------------------
第一点,void select_sort(int array[], int n)里,for (i = 0; i < 10; i++) 不妥,感觉应该是 for (i = 0; i < n; i++) 
第二点,在参考答案里,实在看不出 k 的作用。
第三点,你的程序的思路完全没有错,只是写错了,导致溢出错误:
for (j = i + 1; j < n;j++)
 if (array[j] < array[i])
 t = array[j]; array[j] = array[i]; array[i] = t;
应该是:
for (j = i + 1; j < n;j++)
 if (array[j] < array[i])
{ t = array[j]; array[j] = array[i]; array[i] = t;}
这两个花括号很重要。