C编程: Pointer arithmetics instead of index operations

标签 c pointers indexing operations

所以我对 C 编程非常陌生,在一个项目中,我得到了一个快速排序程序(我将在下面链接),并要求我使用指针算术重写快速排序程序,即没有任何索引操作。我该怎么做呢?我应该在代码中做什么来实现指针算术而不是索引操作? 我的代码在这里:http://ideone.com/ku9EhU

#include<stdio.h>
#define N 10

void quicksort(int a[], int low, int high);
int split(int a[], int low, int high);

int main(void)
{
  int a[N], i;

  printf("Enter %d numbers to be sorted: ", N);
  for (i = 0; i < N; i++)
    scanf("%d", &a[i]);

  quicksort(a, 0, N - 1);

  printf("In sorted order: ");
  for (i = 0; i < N; i++)
    printf("%d ", a[i]);
  printf("\n");

  return 0;
}

void quicksort(int a[], int low, int high)
{
  int middle;

  if (low >= high) return;
  middle = split(a, low, high);
  quicksort(a, low, middle - 1);
  quicksort(a, middle + 1, high);
}

int split(int a[], int low, int high)
{
  int part_element = a[low];

  for (;;) {
    while (low < high && part_element <= a[high])
      high--;
    if (low >= high) break;
    a[low++] = a[high];

    while (low < high && a[low] <= part_element)
      low++;
    if (low >= high) break;
    a[high--] = a[low];
  }

  a[high] = part_element;
  return high;
}

最佳答案

数组索引访问a[i]等于指针算术*(a + i)

关于C编程: Pointer arithmetics instead of index operations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30019330/

相关文章:

c++ - 使用信号中止功能实现

r - 按向量 B 对命名向量 A 的值进行排序,但尽可能保持名称顺序

database - 为什么 sybase 索引大小比数据本身大得多

java - 重新排序链接列表

c++ - 在这里出现 'sigbrt'错误的原因是什么?

mysql - Neo4j 中的索引,文本或整数

c - 将原始结构内容(字节)写入 C 中的文件。对写入的实际大小感到困惑

c - 将新的十六进制值重新分配给 Uint32 *

c - fscanf()。用 C 读取具有模式的文件

c++ - 将指针传递给静态方法