使用快速排序使用指针对数组进行排序

埃瓦尔多

我正在尝试使用快速排序对数组“选项卡”中的值进行排序,但它不起作用。主要功能只是为每个选项卡设置名称和薪水[n]

typedef struct employee Employee;

struct employee{
  char name[81];
  float salary;
};

Employee *tab[10];

void sort(Employee **tab, int begin, int end){
  int p = tab[(begin + end) / 2] , i = end, j = begin;  
  /*p is the pivot*/
  do{
    while(tab[i]->salary < p && i < end) i++; 
    while(tab[j]->salary > p && j > begin) j--; 

    if(i <= j){
      int tmp = tab[i]->salary;
      tab[i]->salary = tab[j]->salary;
      tab[j]->salary = tmp;
      i++; j--;
    }
  }while(i <= j);

  if(begin < j) sort(tab, begin, j);
  if(end > i) sort(tab, i, end);
}
资源管理器

评论中指出的变化。这是降序排序(如在后续问题中所问)。

#include <stdio.h>

typedef struct employee{
    char name[81];
    float salary;
}Employee;

void sort(Employee **tab, int begin, int end){
    float p = tab[(begin + end) / 2]->salary; /* float needed for compare == */
    int i = begin, j = end;
    Employee *tmp;                          /* microsoft is c89 */

    while(i <= j){                      /* using while */
        while(tab[i]->salary > p) i++;  /* >, <= pivot stops scan */
        while(tab[j]->salary < p) j--;  /* <, >= pivot stops scan */
        if(i > j)                       /* using break */
            break;
        tmp = tab[i];
        tab[i] = tab[j];
        tab[j] = tmp;
        i++; j--;
    }

    if(begin < j) sort(tab, begin, j);
    if(end > i) sort(tab, i, end);
}

int main(int argc, char**argv)
{
    Employee tab[] = {{"john", 525.}, {"jack", 520.},
                      {"mary", 537.}, {"jane", 523.},
                      {"joan", 548.}, {"sam",  524.},
                      {"lisa", 527.}, {"ann",  541.},
                      {"tom",  521.}, {"ted",  531.}};
    Employee *ptr[sizeof(tab)/sizeof(tab[0])];
    int i;
    /* create array of pointers */
    for(i = 0; i < (sizeof(tab)/sizeof(tab[0])); i++)
        ptr[i] = &tab[i];
    sort(ptr, 0, sizeof(ptr)/sizeof(ptr[0])-1);
    for(i = 0; i < (sizeof(ptr)/sizeof(ptr[0])); i++)
        printf("%5s %6.2f\n", ptr[i]->name, ptr[i]->salary);
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用指针对数组进行排序-C编程

来自分类Dev

C编程:使用指针对数组进行排序的函数

来自分类Dev

使用指针对数组进行排序,并且不包含任何索引变量

来自分类Dev

使用指针对用户定义对象的C ++数组进行排序?

来自分类Dev

使用C中的指针按升序对数组进行排序

来自分类Dev

使用快速排序对字符数组进行排序

来自分类Dev

Swift:使用NSRange对数组进行排序

来自分类Dev

使用HTML标签对数组进行排序

来自分类Dev

使用模板对数组进行排序

来自分类Dev

如何使用PHP对数组进行排序

来自分类Dev

Python:使用NaN对数组进行排序

来自分类Dev

使用HTML标签对数组进行排序

来自分类Dev

使用中位数对数组进行排序

来自分类Dev

使用javascript对数组表进行排序

来自分类Dev

使用 compareTo 方法对数组进行排序

来自分类Dev

使用 Powershell 对数组值进行排序

来自分类Dev

MIPS 对数组进行快速排序

来自分类Dev

使用排序功能按NSDates对数组进行排序

来自分类Dev

使用插入排序对数组进行排序

来自分类Dev

使用合并排序对数组进行排序

来自分类Dev

在 Ruby 中使用冒泡排序对数组进行排序

来自分类Dev

使用预定义的排序顺序对数组进行排序

来自分类Dev

在Matlab中针对行总和对数组进行排序的快速方法

来自分类Dev

使用NSRange快速按长度和位置对数组进行排序

来自分类Dev

使用NSRange快速按长度和位置对数组进行排序

来自分类Dev

使用指针对2D数组进行插入排序

来自分类Dev

使用指针对二维数组中的一行中的元素进行排序

来自分类Dev

使用qsort对结构指针数组进行排序

来自分类Dev

使用qsort对结构指针数组进行排序

Related 相关文章

热门标签

归档