思路:
找出最大的元素,与最后的元素交换位置,然后只要对前n-1个元素进行排序即可。
解答:
#include <cstdio>
using namespace std;
void select_sort(int a[], int size) {
for(int i = 0; i <= size - 1; i++) {
int min = i;
for(int j = i + 1; j <= size - 1; j++) {
if(a[j] < a[min])
min = j;
}
int temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
void print(int a[], int size) {
for(int i = 0; i <= size - 2; i++) {
printf("%d ", a[i]);
}
printf("%d\n", a[size - 1]);
}
int main() {
int test_num;
while(scanf("%d", &test_num) != EOF) {
int a[1000];
for(int i = 0; i <= test_num - 1; i++) {
scanf("%d", &a[i]);
}
if(test_num == 1) {
printf("%d\n", a[0]);
printf("-1\n");
continue;
}
if(test_num == 1) {
printf("%d\n", a[0]);
printf("-1\n");
}
else {
int max = 0;
//找出最大的元素的下标
for(int i = 0; i <= test_num - 1; i++) {
if(a[i] > a[max])
max = i;
}
//最大的元素与最后的元素交换位置
int temp = a[max];
a[max] = a[test_num - 1];
a[test_num - 1] = temp;
select_sort(a, test_num - 1); // 对前n-1个元素进行排序
printf("%d\n", a[test_num - 1]); // 输出最后一个元素,即最大的元素
print(a , test_num - 1); // 输出前n-1个元素
}
}
return 0;
}