C 语言中双精度数组的排序

c++

1个回答

写回答

xzrg04001

2025-06-29 22:20

+ 关注

AI
AI

使用C语言进行双精度数组的排序是一项常见的任务。排序是一种将一组元素按照特定顺序排列的操作,常用的排序算法有冒泡排序、选择排序、插入排序、快速排序等。在本文中,我们将介绍如何使用C语言进行双精度数组的排序,并提供一个实例代码来帮助理解。

双精度数组排序的步骤

在进行双精度数组排序之前,我们先来了解一下排序的基本步骤。下面是一个通用的排序算法的步骤:

1. 遍历数组,找到数组中的最小(或最大)元素。

2. 将最小(或最大)元素与数组的第一个元素进行交换。

3. 在剩下的元素中,重复步骤1和步骤2,直到所有的元素都排好序。

冒泡排序

冒泡排序是一种简单但效率较低的排序算法。它的基本思想是通过相邻元素的比较和交换,将最大的元素逐渐“冒泡”到数组的末尾。下面是冒泡排序的实现代码:

c

#include <stdio.h>

void bubbleSort(double arr[], int n) {

int i, j;

double temp;

for (i = 0; i < n-1; i++) {</p> for (j = 0; j < n-i-1; j++) {</p> if (arr[j] > arr[j+1]) {

temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

}

int mAIn() {

double arr[] = {5.4, 2.3, 1.2, 3.7, 4.1};

int n = sizeof(arr) / sizeof(arr[0]);

bubbleSort(arr, n);

printf("排序后的数组:");

for (int i = 0; i < n; i++) {</p> printf("%.1f ", arr[i]);

}

return 0;

}

在这个例子中,我们使用了冒泡排序算法对一个双精度数组进行排序。首先定义了一个bubbleSort函数,它接受一个双精度数组和数组的大小作为参数。在函数中,我们使用两层嵌套循环来比较相邻的元素并进行交换,直到整个数组排序完成。然后,在主函数中定义了一个双精度数组arr,并使用sizeof运算符计算出数组的大小。接下来,调用bubbleSort函数对数组进行排序,并输出排序后的结果。

选择排序

选择排序是一种简单但效率较高的排序算法。它的基本思想是在未排序的部分中,选择最小(或最大)的元素,并将其放置在已排序部分的末尾。下面是选择排序的实现代码:

c

#include <stdio.h>

void selectionSort(double arr[], int n) {

int i, j, minIndex;

double temp;

for (i = 0; i < n-1; i++) {</p> minIndex = i;

for (j = i+1; j < n; j++) {</p> if (arr[j] < arr[minIndex]) {</p> minIndex = j;

}

}

temp = arr[i];

arr[i] = arr[minIndex];

arr[minIndex] = temp;

}

}

int mAIn() {

double arr[] = {5.4, 2.3, 1.2, 3.7, 4.1};

int n = sizeof(arr) / sizeof(arr[0]);

selectionSort(arr, n);

printf("排序后的数组:");

for (int i = 0; i < n; i++) {</p> printf("%.1f ", arr[i]);

}

return 0;

}

在这个例子中,我们使用了选择排序算法对一个双精度数组进行排序。首先定义了一个selectionSort函数,它接受一个双精度数组和数组的大小作为参数。在函数中,我们使用两层嵌套循环来找到未排序部分的最小元素,并将其与已排序部分的末尾进行交换。然后,在主函数中定义了一个双精度数组arr,并使用sizeof运算符计算出数组的大小。接下来,调用selectionSort函数对数组进行排序,并输出排序后的结果。

插入排序

插入排序是一种简单且稳定的排序算法。它的基本思想是将一个元素插入到已排序的部分中的正确位置。下面是插入排序的实现代码:

c

#include <stdio.h>

void insertionSort(double arr[], int n) {

int i, j;

double key;

for (i = 1; i < n; i++) {</p> key = arr[i];

j = i - 1;

while (j >= 0 && arr[j] > key) {

arr[j+1] = arr[j];

j = j - 1;

}

arr[j+1] = key;

}

}

int mAIn() {

double arr[] = {5.4, 2.3, 1.2, 3.7, 4.1};

int n = sizeof(arr) / sizeof(arr[0]);

insertionSort(arr, n);

printf("排序后的数组:");

for (int i = 0; i < n; i++) {</p> printf("%.1f ", arr[i]);

}

return 0;

}

在这个例子中,我们使用了插入排序算法对一个双精度数组进行排序。首先定义了一个insertionSort函数,它接受一个双精度数组和数组的大小作为参数。在函数中,我们使用一个循环来逐个插入未排序部分的元素到已排序部分的正确位置。然后,在主函数中定义了一个双精度数组arr,并使用sizeof运算符计算出数组的大小。接下来,调用insertionSort函数对数组进行排序,并输出排序后的结果。

快速排序

快速排序是一种高效的排序算法。它的基本思想是通过选择一个基准元素,将数组分割成两个子数组,其中一个子数组中的元素都小于基准元素,另一个子数组中的元素都大于基准元素。然后,递归地对两个子数组进行排序。下面是快速排序的实现代码:

c

#include <stdio.h>

int partition(double arr[], int low, int high) {

double pivot = arr[high];

int i = low - 1;

double temp;

for (int j = low; j <= high-1; j++) {</p> if (arr[j] < pivot) {</p> i++;

temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

temp = arr[i+1];

arr[i+1] = arr[high];

arr[high] = temp;

return (i+1);

}

void quickSort(double arr[], int low, int high) {

if (low < high) {</p> int pi = partition(arr, low, high);

quickSort(arr, low, pi-1);

quickSort(arr, pi+1, high);

}

}

int mAIn() {

double arr[] = {5.4, 2.3, 1.2, 3.7, 4.1};

int n = sizeof(arr) / sizeof(arr[0]);

quickSort(arr, 0, n-1);

printf("排序后的数组:");

for (int i = 0; i < n; i++) {</p> printf("%.1f ", arr[i]);

}

return 0;

}

在这个例子中,我们使用了快速排序算法对一个双精度数组进行排序。首先定义了一个partition函数,它接受一个双精度数组和数组的起始位置和结束位置作为参数。在函数中,我们选择数组的最后一个元素作为基准元素,并通过一次遍历将数组分割成两个子数组。然后,在主函数中定义了一个双精度数组arr,并使用sizeof运算符计算出数组的大小。接下来,调用quickSort函数对数组进行排序,并输出排序后的结果。

通过本文,我们了解了如何使用C语言对双精度数组进行排序。我们介绍了冒泡排序、选择排序、插入排序和快速排序这几种常见的排序算法,并提供了相应的实例代码。这些排序算法各有优缺点,可以根据实际需求选择合适的算法来进行数组排序。希望本文对你理解双精度数组的排序有所帮助!

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号