c 您所在的位置:网站首页 C语言指针排序数组 c

c

2024-05-14 06:07| 来源: 网络整理| 查看: 265

  通过指针的指针,以及一个指针数组,对实际数组元素进行排序,有一个优点,就是排序过程交换的只有指针数组中的值,而不是实际的数组的元素.当实际元素中的对象很大,特别是结构体等类型时,这样做是很有好处.

  下面的图表示了排序前和排序后,内存中的变化情况:

 

 

  以下代码是上图的实现:

1 #include 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 void 27 show(int **p) { 28 for (int i = 0; i < SIZE; i++) 29 printf("%d ", **(p + i)); 30 printf("\n"); 31 } 32 33 int 34 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 9 after sorting: 1 4 7 8 9

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有