70,035
社区成员
发帖
与我相关
我的任务
分享//2.进行处理
void solveArr(int *p, int count){
for (int i = 0; i< count; i++) {
int min = *p;
int temp = 0,index = 0;
if (min > *(p + i)) {
min = *(p + i); //找出最小值
index = i;
temp = *p; //存储第一个元素
*p = min; //将最小数赋予第一位上
*(p + index) = temp;//将第一个数赋予最小值所在的位置.
}
}
for (int j = 0; j < count; j++) {
int max = *p;
int temp1 = 0,index1 = 0;
if (max < *(p + j)) {
max = *(p + j);//找出最大值
index1 = j; //存储最大值所在的下标
temp1 = *(p + 9); //存储最后一个元素
*(p + count - 1) = max;//将最大数赋予最后一个位置
*(p + index1) = temp1;//将最后一个元素赋予最大值所在的位置
}
}
}
void solveArr(int *p, int count){
for (int i = 0; i< count; i++) {
int min = *p;
int temp = 0,index = 0;
if (min > *(p + i)) {
min = *(p + i); //这里并不是最小值,而是比min小的值
index = i;
temp = *p; //存储第一个元素
*p = min; //将最小数赋予第一位上
*(p + index) = temp;//将第一个数赋予最小值所在的位置.
}
}
for (int j = 0; j < count; j++) {
int max = *p;
int temp1 = 0,index1 = 0;
if (max < *(p + j)) {
max = *(p + j);//这里也不是最大值,而是比max大的值
index1 = j; //存储最大值所在的下标
temp1 = *(p + 9); //存储最后一个元素
*(p + count - 1) = max;//将最大数赋予最后一个位置
*(p + index1) = temp1;//将最后一个元素赋予最大值所在的位置
}
}
}
所谓最小值最大值,是你循环完整个数组得到的结果。你在循环中只要找到比暂时的结果(max,min)就认为是最小值或者最大值进行交换,这是不对的。你的顺序应该这样调:
void solveArr(int *p, int count){
int min = *p;
int temp = 0, index = 0;
for (int i = 0; i< count; i++) {
if (min > *(p + i)) {
min = *(p + i); //找出最小值
index = i;
}
}
temp = *p; //存储第一个元素
*p = min; //将最小数赋予第一位上
*(p + index) = temp;//将第一个数赋予最小值所在的位置.
int max = *p;
int temp1 = 0, index1 = 0;
for (int j = 0; j < count; j++) {
if (max < *(p + j)) {
max = *(p + j);//找出最大值
index1 = j; //存储最大值所在的下标
}
}
temp1 = *(p + 9); //存储最后一个元素
*(p + count - 1) = max;//将最大数赋予最后一个位置
*(p + index1) = temp1;//将最后一个元素赋予最大值所在的位置
}
顺便给你一个选择排序的代码,其实就是这个题目要求的拓展:
#include<stdio.h>
#include<limits.h>
int* find_max(int* start, int sum){
int max = 0, *p = start;
for (int i = 0; i < sum; ++i){
p = (max < *(start + i) ? start + i : p);
max = (max < *(start + i) ? *(start + i) : max);
}
return p;
}
int* find_min(int* start, int sum){
int min = INT_MAX, *p = start;
for (int i = 0; i < sum; ++i){
p = (min > *(start + i) ? start + i : p);
min = (min>*(start + i) ? *(start + i) : min);
}
return p;
}
void exchange(int* a, int* b){
int temp = *a;
*a = *b;
*b = temp;
}
void sort(int* a, int count){
for (int i = 0, j = count - 1; i < j; ++i, --j){
exchange(find_min(a + i, count - i * 2), a + i);
exchange(find_max(a + i, count - i * 2), a + j);
}
}
int main(){
int a[] = { 2, 1, 3, 4, 5, 6, 7, 8, 10, 9 };
sort(a, 10);
for (int i = 0; i < 10; ++i)
printf("%d ", a[i]);
}