#include "pch.h"
#include<stdio.h>
#define N 40
int readscore(int score[]);
void printscore(int score[], int n);
void seletionsort(int a[], int n, int(*compare)(int a, int b));//compare是指向函数的指针,改函数需要两个int变量
int ascending(int a, int b);//升序
int descending(int a, int b);//降序
void swap(int *x, int *y);
int main()
{
int score[N], n;
int order;
n = readscore(score);//写入成绩,记录有效个数
printf("Totle studets are %d\n", n);//输出总人数
printf("Enter 1 to sort in ascending order,\n");//用1和2来选择升或降序
printf("Enter 2 to sort in descending order:");
scanf("%d", &order);
printf("Data items in original order\n");//输出没排序的
printscore(score, n);
if (order == 1)
{
seletionsort(score, n, ascending);
printf("Data items in ascending order\n");
}
else
{
seletionsort(score, n, descending);
printf("Data items in descending order\n");
}
printscore(score, n);//输出排序后的
return 0;
}
int readscore(int score[])
{
int i = -1;
do
{
i++;
printf("Input score:");
scanf("%d", &score[i]);
} while (score[i] >= 0);//成绩为负值时停止写入
return i;
}
void printscore(int score[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%5d", score[i]);
}
printf("\n");
}
void seletionsort(int a[], int n, int(*compare)(int a, int b))
{
int i, j, k;
for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if ((*compare)(a[j], a[k]))
k = j;
}
if (k != i)
swap(&a[k], &a[i]);
}
}
int ascending(int a, int b)
{
return a < b;
}
int descending(int a, int b)
{
return a > b;
}
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
指针练习排序
最新推荐文章于 2023-01-16 15:10:54 发布