为什么同一串代码,输入也相同前后就隔了两三分钟,结果会不一样
temp = arr[0];
主要是这里:
temp = arr[0];
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int main() {
int arr[10];
int i, temp, j, seat;
printf("请输入十个整数:");
for (i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
temp = arr[0];
seat = 1;
for (j = 1; j < 10; j++) {
if (arr[j] < temp) {
temp = arr[j];
seat = j + 1;
}
}
printf("十个数中最小的是 %d,在数组的第 %d 个\n", temp, seat);
return 0;
}
temp = arr[0]
或者temp=65535也行
你写temp = arr,获取到的是数组的地址,这个地址万一是非常大的数,那程序运行就没问题
如果本身是负数,那最小值肯定就是这个地址了
这个并不是像我们之前编写的程序那样,而是快排算法的另一种编写方式。
inline void swap(int &a, int &b) {
int t = a;
a = b;
b = t;}
int partition(int *a, int p, int r) {
int x = a[_____];
int i = p - 1;
for(int j = p; j < r - 1; ++j) {
if (a[j] <= x) {
___;
swap(___,a[j]);
}
}
swap(a[i+1],___);
return ___;}
void quicksort(int *a, int p, int r) {
if (p < r - 1) {
int q = partition(a, p, r);
quicksort(a, p, q);
quicksort(a, q+1, r);
}
}
int main( ) {
const int N = 100;
int a[N]; // Initialized
quicksort(a, 0, N);
return 0; }
参考答案:
r – 1
++i或 i++
a[i]
a[r-1]
i + 1