码迷,mamicode.com
首页 > 编程语言 > 详细

c - 对数组进行排序(通过指针的指针)

时间:2014-10-30 01:32:38      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   for   sp   div   

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

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

 

bubuko.com,布布扣

 

  以下代码是上图的实现:

 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 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

 

c - 对数组进行排序(通过指针的指针)

标签:style   blog   http   io   color   ar   for   sp   div   

原文地址:http://www.cnblogs.com/listened/p/4060908.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!