思路:
简简单单的排序
解答:
#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 insert_sort(int a[], int size) {
for(int i = 1; i <= size - 1; i++) {
int j = i;
int temp = a[i];
while(j > 0 && temp < a[j-1]) {
a[j] = a[j-1];
j--;
}
a[j] = 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[100];
for(int i = 0; i <= test_num - 1; i++) {
scanf("%d", &a[i]);
}
insert_sort(a, test_num); //select_sort(a, test_num);
print(a, test_num);
}
return 0;
}
笔记:
Q1:为什么插入排序中while循环条件j>0而不能等于0?
A1:因为要保证 temp < a[j-1] 中a的下标不会小于0且经过多次 j-- 后最终 j=0 。