c语言编写两个函数,将n个正整数中的素数按升序排序
时间: 2024-12-16 12:15:48 浏览: 8
c语言:实现一个函数,判断一个数是不是素数
5星 · 资源好评率100%
在C语言中,要编写一个程序来对给定的n个正整数中的素数进行升序排序,我们可以按照以下步骤来设计:
1. 定义一个函数 `is_prime` 检查一个数是否为素数。这个函数接受一个整数作为输入,如果它是质数则返回1,否则返回0。
```c
int is_prime(int num) {
if (num <= 1) return 0;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return 0;
}
return 1;
}
```
2. 编写另一个函数 `prime_sort`,接收一个整型数组 `arr` 和其长度 `n`,然后遍历数组,找出所有素数并将其存储到一个新的有序数组中。可以使用选择排序算法(或其他排序算法)对素数数组进行排序。
```c
void prime_sort(int arr[], int n, int primes[], int* p_index) {
int j = 0;
for (int i = 0; i < n; i++) {
if (is_prime(arr[i])) {
primes[j++] = arr[i];
}
}
// 对primes数组进行排序(例如使用插入排序)
for (int i = 0; i < j - 1; i++) {
for (int k = i + 1; k < j; k++) {
if (primes[k] < primes[i]) {
int temp = primes[i];
primes[i] = primes[k];
primes[k] = temp;
}
}
}
*p_index = j; // 返回素数的数量
}
```
3. 最后,在主函数中创建一个原始数组、一个临时素数数组以及索引,并调用 `prime_sort` 函数。
```c
int main() {
int n;
printf("Enter the number of integers: ");
scanf("%d", &n);
int arr[n], primes[100]; // 素数最多假设100个
int p_index = 0;
// 读取并检查每个数字是否为素数
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
if (is_prime(arr[i])) {
primes[p_index++] = arr[i];
}
}
prime_sort(arr, n, primes, &p_index);
printf("Sorted Prime Numbers: \n");
for (int i = 0; i < p_index; i++) {
printf("%d ", primes[i]);
}
printf("\n");
return 0;
}
```
阅读全文