c语言运用指针数组和冒泡法进行排序
时间: 2024-11-04 09:08:46 浏览: 20
在C语言中,你可以结合指针数组和冒泡排序算法来对一组数据进行排序。冒泡排序是一种简单的排序算法,它通过不断交换相邻的元素,将较大或较小的数逐渐“浮”到数组的一端。
首先,创建一个指针数组,这个数组的元素是整型指针,它们指向实际需要排序的数据元素。例如:
```c
int* arr = (int*)malloc(sizeof(int) * n); // 分配内存,n是数组长度
// ... 将输入数据存储到arr所指位置
for (int i = 0; i < n - 1; i++) {
int* temp = &arr[i];
for (int j = 0; j < n - 1 - i; j++) {
if (*temp > *(temp + 1)) { // 比较当前元素和下一个元素
// 交换操作
int temp_val = *temp;
*temp = *(temp + 1);
*(temp + 1) = temp_val;
}
}
}
```
这里,`&arr[i]`获取了数组中第i个元素的地址,`*(temp + 1)`则是访问数组中索引比temp大1的元素。通过比较并交换指针所指向的值,冒泡排序完成了升序排列。
相关问题
C语言利用冒泡排序法调用指针数组
要利用冒泡排序法对指针数组进行排序,可以按照以下步骤进行操作:
1. 定义一个指针数组,其中每个指针指向要排序的元素。
2. 使用冒泡排序算法对指针数组进行排序,而不是直接对元素进行排序。
3. 冒泡排序算法的主要思想是比较相邻的元素,如果它们的顺序不正确,则交换它们。重复此过程,直到整个数组排序完成。
4. 在交换指针时,实际上是在交换指针所指向的元素的位置。
下面是一个示例代码来演示如何使用冒泡排序法对指针数组进行排序:
```c
#include <stdio.h>
void bubbleSort(int *arr[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (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 num1 = 5, num2 = 2, num3 = 8;
int *ptrArr[] = {&num1, &num2, &num3};
int i;
printf("Before sorting: ");
for (i = 0; i < 3; i++) {
printf("%d ", *ptrArr[i]);
}
bubbleSort(ptrArr, 3);
printf("\nAfter sorting: ");
for (i = 0; i < 3; i++) {
printf("%d ", *ptrArr[i]);
}
return 0;
}
```
在这个示例中,我们定义了一个指针数组 `ptrArr` ,其中包含了三个指针,分别指向 `num1`、`num2` 和 `num3` 这三个整数变量。然后,我们调用 `bubbleSort` 函数对指针数组进行排序。排序完成后,我们输出排序后的结果。
注意,在交换指针时,我们实际上是在交换指针所指向的元素的位置,而不是交换指针本身的值。
用c语言程序完成指针数组的应用:学院现有9系2部,建立一个char型指针数组指向这些单位名称,之后用冒泡排序法排序,并输出排序后的单位名称
好的,这是一个简单的 C 语言程序,实现了指针数组的应用和冒泡排序法,来对学院9系2部的单位名称进行排序:
```c
#include <stdio.h>
#include <string.h>
#define NUM 11 // 单位名称的数量
int main() {
char *names[NUM] = {"9系1部", "9系2部", "9系3部", "9系4部", "9系5部", "9系6部", "9系7部", "9系8部", "9系9部", "2系1部", "2系2部"};
// 冒泡排序
for (int i = 0; i < NUM - 1; i++) {
for (int j = 0; j < NUM - i - 1; j++) {
if (strcmp(names[j], names[j+1]) > 0) {
// 交换两个指针指向的字符串
char *tmp = names[j];
names[j] = names[j+1];
names[j+1] = tmp;
}
}
}
// 输出排序后的单位名称
for (int i = 0; i < NUM; i++) {
printf("%s\n", names[i]);
}
return 0;
}
```
解释一下这段代码:
首先,定义了一个长度为 `NUM` 的 `char` 型指针数组 `names`,存储了学院9系2部的单位名称。
然后,使用冒泡排序法对 `names` 数组中的字符串进行排序,排序的依据是使用 `strcmp` 函数比较两个字符串的大小,如果前一个字符串的字典序比后一个字符串大,则交换两个字符串的指针。
最后,使用 `for` 循环遍历 `names` 数组,输出排序后的单位名称。
如果你有任何疑问,欢迎随时询问!
阅读全文