MST

星途 面试题库

面试题:C语言指针遍历数组的专家难度题

在一个大型项目中,有一个结构体数组 struct data { int id; double value; char name[50]; } dataArray[10000]; 现在要使用指针遍历该数组,对数组中的元素按id从小到大进行排序(使用快速排序算法),并且在排序过程中通过指针操作确保数据的完整性和效率。请用C语言实现该功能,写出关键代码段,并简要说明实现思路。
23.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 快速排序的基本思想是通过选择一个基准元素,将数组分为两部分,左边部分的元素小于基准元素,右边部分的元素大于基准元素,然后分别对左右两部分进行递归排序。
  2. 在对结构体数组排序时,通过指针操作结构体数组元素,以确保数据完整性和效率。

关键代码段

#include <stdio.h>
#include <stdlib.h>

// 定义结构体
struct data {
    int id;
    double value;
    char name[50];
};

// 交换两个结构体变量的函数
void swap(struct data *a, struct data *b) {
    struct data temp = *a;
    *a = *b;
    *b = temp;
}

// 划分函数
int partition(struct data *dataArray, int low, int high) {
    int pivot = dataArray[high].id;
    int i = (low - 1);

    for (int j = low; j <= high - 1; j++) {
        if (dataArray[j].id < pivot) {
            i++;
            swap(&dataArray[i], &dataArray[j]);
        }
    }
    swap(&dataArray[i + 1], &dataArray[high]);
    return (i + 1);
}

// 快速排序函数
void quickSort(struct data *dataArray, int low, int high) {
    if (low < high) {
        int pi = partition(dataArray, low, high);

        quickSort(dataArray, low, pi - 1);
        quickSort(dataArray, pi + 1, high);
    }
}

在主函数中调用 quickSort 函数进行排序:

int main() {
    struct data dataArray[10000];
    // 假设已经给数组赋值

    quickSort(dataArray, 0, 9999);

    // 可以在此处添加输出验证排序结果的代码

    return 0;
}