首页 > 代码库 > c - 对数组进行排序(通过指针的指针)
c - 对数组进行排序(通过指针的指针)
通过指针的指针,以及一个指针数组,对实际数组元素进行排序,有一个优点,就是排序过程交换的只有指针数组中的值,而不是实际的数组的元素.当实际元素中的对象很大,特别是结构体等类型时,这样做是很有好处.
下面的图表示了排序前和排序后,内存中的变化情况:
以下代码是上图的实现:
1 #include <stdio.h> 2 3 #define SIZE 5 4 5 //这里用冒泡排序. 6 void 7 bubbleSort(int **pArr) { 8 int *tmp; 9 int isSwap; //标识排序过程是否进行交换操作(0为没有交换,1为交换).10 for(int i = 0; i < SIZE - 1; i++) {11 isSwap = 0;12 for(int j = 0; j < SIZE - 1 - i; j++) {13 if(**(pArr + j) > **(pArr + j + 1)) {14 tmp = *(pArr + j);15 *(pArr + j) = *(pArr + j + 1);16 *(pArr + j + 1) = tmp;17 18 isSwap = 1; //标识进行交换操作.19 }20 } //for(j).21 if(!isSwap) break; //表示排好序.22 }23 }24 25 //打印数组实际元素.26 void27 show(int **p) {28 for (int i = 0; i < SIZE; i++)29 printf("%d ", **(p + i));30 printf("\n");31 }32 33 int34 main(void) {35 int a[] = {7,4,8,1,9}; //实际数组.36 int *pArr[SIZE] ; //指针数组,每个元素与实际数组中一一对应.37 int **p = pArr; //指向指针数组的首地址的指针.38 39 for (int i = 0; i < SIZE; i++)40 pArr[i] = &a[i]; //对指针数组的元素逐一赋值.41 42 printf("before sorting:\n");43 show(p);44 bubbleSort(p);45 printf("after sorting:\n");46 show(p);47 }
output:
before sorting:7 4 8 1 9after sorting:1 4 7 8 9
c - 对数组进行排序(通过指针的指针)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。