【C语言入门级教学】冒泡排序和指针数组

发布于:2025-06-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

1.冒泡排序

冒泡排序的核⼼思想:两两相邻的元素进⾏⽐较。

 //⽅法1  
void bubble_sort(int arr[], int sz)//参数接收数组元素个数  
{ 
    int i = 0;
    for(i=0; i-1; i++) 
    { 
        int j = 0; 
        for(j=0; j-1; j++) 
        { 
            if(arr[j] > arr[j+1]) 
            { 
                int tmp = arr[j]; 
                arr[j] = arr[j+1]; 
                arr[j+1] = tmp; 
            } 
        } 
    } 
} 
int main() 
{ 
    int arr[] = {3,1,7,5,8,9,0,2,4,6};
    int sz = sizeof(arr)/sizeof(arr[0]); 
    bubble_sort(arr, sz); 
    int i = 0; 
    for(i=0; i<sz;i++)
        printf("%d ", arr[i]); 
}
	return 0; 
} 
//⽅法2 - 优化  
void bubble_sort(int arr[], int sz)//参数接收数组元素个数  
{ 
    int i = 0; 
    for(i=0; i-1; i++) 
    { 
        int flag = 1;//假设这⼀趟已经有序了  
        int j = 0; 
        for(j=0; j-1; j++) 
        { 
            
            if(arr[j] > arr[j+1]) 
            { 
                flag = 0;//发⽣交换就说明,⽆序  
                int tmp = arr[j]; 
                arr[j] = arr[j+1]; 
                arr[j+1] = tmp; 
            } 
        } 
        if(flag == 1)//这⼀趟没交换就说明已经有序,后续⽆序排序了  
            break; 
    } 
} 
int main() 
{ 
    int arr[] = {3,1,7,5,8,9,0,2,4,6}; 
    int sz = sizeof(arr)/sizeof(arr[0]); 
    bubble_sort(arr, sz); 
    int i = 0; 
    for(i=0; i<sz;i++)
        printf("%d ", arr[i]); 
} 
	return 0; 
}

2.⼆级指针

指针变量也是变量,是变量就有地址,而指针变量的地址存放在⼆级指针中。

⼆级指针画图

对于⼆级指针的运算有:

• *ppa 通过对ppa中的地址进⾏解引⽤,这样找到的是 pa , *ppa 其实访问的就是 pa .

 int b = 20 
*ppa = &b;//等价于 pa = &b; 

• * *ppa 先通过 *ppa 找到 pa ,然后对 pa 进⾏解引⽤操作: * pa ,那找到的是 a .

**ppa = 30; 
//等价于*pa = 30;  
//等价于a = 30;  

3.指针数组

指针数组是指针还是数组? 我们类⽐⼀下,整型数组是存放整型的数组,字符数组是存放字符的数组。 那指针数组就是存放指针的数组。

整型数组和字符数组

指针数组的每个元素都是⽤来存放地址(指针)的。
如下图:

指针数组的每个元素是地址,⼜可以指向⼀块区域。

4.指针数组模拟⼆维数组

#include<stdio.h>  
int main() 
{ 
    int arr1[] = {1,2,3,4,5}; 
    int arr2[] = {2,3,4,5,6}; 
    int arr3[] = {3,4,5,6,7}; //数组名是数组⾸元素的地址,类型是int*的,就可以存放在parr数组中  
    int* parr[3] = {arr1, arr2, arr3}; 
    int i = 0; 
    int j = 0; 
    for(i=0; i<3; i++) 
    { 
        for(j=0; j<5; j++) 
        { 
            printf("%d ", parr[i][j]); 
        } 
        printf("\n"); 
    }
    return 0; 
} 

parr数组的画图演⽰

parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。
上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的


网站公告

今日签到

点亮在社区的每一天
去签到