简述用指针的方法,如何进行数组排序

简述用指针的方法,如何进行数组排序
简述用指针的方法,如何进行数组排序
简述用指针的方法,如何进行数组排序

给你贴个示例,用指针进行 冒泡排序:


#include<stdio.h>
// 从后往前冒泡
void sort(int *a, int n)
{
    int i,j,t,noswap;
    for(i=0;i< n-1; i++)
    {
        noswap=1;
        for(j=n-1;j>i;j--)
            if(*(a + j - 1) < *(a + j))
            {
                t=*(a + j - 1);
                *(a + j - 1)= *(a + j);
                *(a + j)=t;
                noswap=0;
            }
        if(noswap)    
            break;
    }
}

int main() 
{
     
    int n;
    printf("Input n:");
    scanf("%d", &n);
     
    printf("Input %d numbers:", n);

    int a[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    sort(a, n);

    printf("Sorting results:");
    for (int i = 0; i < n; i++) {
        printf("%4d", a[i]);
    }

    return 0;
}

使用指针的方法可以通过交换数组元素的指针来进行数组排序。下面是一个使用冒泡排序法进行数组排序的示例代码:

#include <stdio.h>
// 定义比较函数,用于比较两个数的大小
int compare(int *a, int *b) {
    return *a - *b;
}
int main() {
    // 定义一个数组并初始化
    int arr[5] = {
        5, 4, 3, 2, 1
    }
    ;
    // 定义两个指针,分别指向数组的首元素和尾元素
    int *p = arr, *q = arr + 4;
    // 使用冒泡排序法对数组进行排序
    while (p < q) {
        for (int *i = p; i < q; i++) {
            // 如果当前元素比后面的元素大,则交换两个元素的指针
            if (compare(i, i + 1) > 0) {
                int *temp = i;
                i = i + 1;
                i + 1 = temp;
            }
        }
        // 每次循环结束后,尾指针向前移动一个位置
        q--;
    }
    // 输出排序后的数组
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}