用C语言和选择排序法编写一个排序函数,实现对数组元素由小到大排列。
时间: 2024-03-14 20:44:46 浏览: 230
好的,这里给出一个使用选择排序算法实现的C语言排序函数,可以将一个整型数组按照从小到大的顺序排列:
```c
void selection_sort(int* arr, int len) {
int i, j, min_index;
for (i = 0; i < len - 1; i++) {
min_index = i;
for (j = i + 1; j < len; j++) {
if (arr[j] < arr[min_index]) {
min_index = j;
}
}
// 将最小元素放到前面
int temp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = temp;
}
}
```
这个函数接收一个整型数组和数组长度作为参数,使用选择排序算法对数组进行排序。选择排序的基本思想是从第一个元素开始,依次找到后面最小的元素,然后将它与第一个元素交换位置,再从第二个元素开始,依次找到后面的最小元素,将它与第二个元素交换位置,以此类推,直到所有元素都按照从小到大的顺序排列。时间复杂度为 $O(n^2)$,不适合处理大规模数据。
相关问题
用C语言 通过下面题目,掌握数组做函数参数、指针指向数组、冒泡排序、选择法排序等内容 •编写排序函数 void selectsort(int *array, int n),它的功能是利用选择法实现数组元素从 大到小的排序;(void bubbleSort (int *array, int n)),它的功能是利用冒泡法实现数组元 素从小到大的排序。 •在main函数中定义数组(长度自定),用scanf进行数组的初始化,然后调用selectSort函数进行 从大到小排序,再使用bubbleSort函数重新进行从小到大的排序。最后将排好序的数组打印输出。
好的,我来解答你的问题。
首先,我们来看一下题目中要求的两个排序函数的代码实现:
```c
void selectsort(int *array, int n) {
int i, j, max, temp;
for (i = 0; i < n - 1; i++) {
max = i;
for (j = i + 1; j < n; j++) {
if (array[j] > array[max]) {
max = j;
}
}
if (max != i) {
temp = array[max];
array[max] = array[i];
array[i] = temp;
}
}
}
void bubbleSort(int *array, int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
```
其中,selectsort函数使用了选择法排序,从大到小排列数组元素;bubbleSort函数使用了冒泡法排序,从小到大排列数组元素。
接下来,我们在main函数中定义一个数组,并使用scanf进行初始化。然后调用selectSort函数将数组从大到小排序,再使用bubbleSort函数将其从小到大排序。最后将排好序的数组打印输出。
完整代码如下:
```c
#include <stdio.h>
void selectsort(int *array, int n) {
int i, j, max, temp;
for (i = 0; i < n - 1; i++) {
max = i;
for (j = i + 1; j < n; j++) {
if (array[j] > array[max]) {
max = j;
}
}
if (max != i) {
temp = array[max];
array[max] = array[i];
array[i] = temp;
}
}
}
void bubbleSort(int *array, int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
int main() {
int n, i;
printf("请输入数组长度:");
scanf("%d", &n);
int array[n];
printf("请输入数组元素:");
for (i = 0; i < n; i++) {
scanf("%d", &array[i]);
}
selectsort(array, n);
printf("从大到小排序后的数组:");
for (i = 0; i < n; i++) {
printf("%d ", array[i]);
}
printf("\n");
bubbleSort(array, n);
printf("从小到大排序后的数组:");
for (i = 0; i < n; i++) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
```
这样,我们就完成了题目的要求。希望我的回答能够帮助到你!
输入一个数组,编写一个函数对该数组使用冒泡法进行升序排列,主函数中调用该函数并输出排序结果。用C语言编写代码
以下是使用C语言实现冒泡排序算法的一个示例,包括主函数和辅助函数:
```c
#include <stdio.h>
// 冒泡排序函数
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 主函数,输入数组并调用排序函数
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
当运行`main`函数时,它将对给定的整数数组进行升序排列,并打印出排序后的结果。
阅读全文