实现选择法排序,在主函数中一次输 入若千个整数,在子函数中实现排序,在主函数根据需要(从大到小或从小到大)调用排序函数,在主函数中输出排序后的结果。要求:子函数利用指针实现。
时间: 2023-09-24 11:06:37 浏览: 81
C语言程序设计-编写函数用选择排序法对数组中的数据进行从小到大的排序;
5星 · 资源好评率100%
### 回答1:
以下是实现选择法排序的代码:
```c
#include <stdio.h>
void selectionSort(int *arr, int n, int order) {
int i, j, min_idx, max_idx, temp;
if (order == 1) { // 升序排序
for (i = 0; i < n-1; i++) {
min_idx = i;
for (j = i+1; j < n; j++) {
if (*(arr+j) < *(arr+min_idx)) {
min_idx = j;
}
}
temp = *(arr+i);
*(arr+i) = *(arr+min_idx);
*(arr+min_idx) = temp;
}
} else if (order == -1) { // 降序排序
for (i = 0; i < n-1; i++) {
max_idx = i;
for (j = i+1; j < n; j++) {
if (*(arr+j) > *(arr+max_idx)) {
max_idx = j;
}
}
temp = *(arr+i);
*(arr+i) = *(arr+max_idx);
*(arr+max_idx) = temp;
}
}
}
int main() {
int arr[1000], n, i, order;
printf("请输入数组长度(不超过1000):");
scanf("%d", &n);
printf("请输入%d个整数:", n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("请选择排序方式(1表示升序,-1表示降序):");
scanf("%d", &order);
selectionSort(arr, n, order);
printf("排序后的结果为:");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在主函数中,首先输入待排序的数组,然后输入排序方式(1 表示升序,-1 表示降序)。接着调用选择法排序的函数 `selectionSort` 对数组进行排序。最后输出排序后的数组。在 `selectionSort` 函数中,利用指针实现数组的排序。
### 回答2:
选择法排序(Selection Sort)是一种简单直观的排序算法。实现选择法排序的思路是,在未排序的序列中,找到最小(或最大)的元素,将其放在序列的起始位置,然后继续对剩余的未排序元素进行相同的操作,直到整个序列排序完成。
以下是实现选择法排序的示例代码:
```c++
#include <iostream>
using namespace std;
void selectionSort(int* arr, int size, bool isAscending) {
for (int i = 0; i < size - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < size; j++) {
if ((isAscending && arr[j] < arr[minIndex]) || (!isAscending && arr[j] > arr[minIndex])) {
minIndex = j;
}
}
swap(arr[i], arr[minIndex]);
}
}
int main() {
const int MAX_SIZE = 1000; // 最大输入数量
int arr[MAX_SIZE]; // 声明一个足够大的数组用于保存输入的整数
int count; // 保存输入的整数数量
bool isAscending; // 标记排序方式
// 输入若干个整数
cout << "请输入整数数量:";
cin >> count;
cout << "请输入整数:";
for (int i = 0; i < count; i++) {
cin >> arr[i];
}
// 输入排序方式
cout << "请选择排序方式(1表示升序,0表示降序):";
cin >> isAscending;
// 调用排序函数
selectionSort(arr, count, isAscending);
// 输出排序后的结果
cout << "排序后的结果:";
for (int i = 0; i < count; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
该示例代码中,通过`int* arr`指针参数传递待排序的数组,`int size`参数传递数组的大小,`bool isAscending`参数指示排序方式(从大到小或从小到大)。子函数`selectionSort`中利用选择法排序算法进行排序。
在主函数中,首先输入整数的数量和具体的整数数值。然后根据需要(从大到小或从小到大),调用`selectionSort`子函数进行排序。最后输出排序后的结果。
### 回答3:
选择排序是一种简单直观的排序算法。它的基本思想是每次从待排序的数据中选择最小的元素,放到已排序的序列末尾。
首先,在主函数中创建一个包含一千个整数的数组,并用循环依次输入这些整数。
然后,定义一个子函数selectionSort,用于实现选择排序。该函数通过指针来操作数组中的元素。函数的参数包括待排序数组的指针和数组的长度。在函数中,使用两层循环,外层循环用于选择最小的元素,内层循环用于找到最小元素的位置。每次找到最小元素后,将其与当前位置的元素进行交换,从而将最小的元素放到已排序的序列末尾。最终,数组将按照从小到大的顺序排列。
最后,在主函数中根据需要选择从大到小或从小到大调用selectionSort函数,并输出排序后的结果。如果需要从大到小排序,则在调用函数时传入数组的指针和长度,并在函数中对选择最小元素的逻辑进行修改,使得选择最大元素并放到已排序的序列末尾。
示例代码如下:
```
#include <stdio.h>
void selectionSort(int* arr, int len) {
for (int i = 0; i < len - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}
int main() {
int arr[1000];
printf("请输入一千个整数:\n");
for (int i = 0; i < 1000; i++) {
scanf("%d", &arr[i]);
}
// 从小到大排序,调用selectionSort函数
selectionSort(arr, 1000);
printf("从小到大排序后的结果:\n");
for (int i = 0; i < 1000; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 从大到小排序,调用selectionSort函数
selectionSort(arr, 1000);
printf("从大到小排序后的结果:\n");
for (int i = 999; i >= 0; i--) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
此代码实现了选择排序,通过指针在子函数中操作数组,最终在主函数中分别输出了从小到大和从大到小排序后的结果。
阅读全文