结构为C的Bubble排序



我有一个由一个元素chara[50]组成的结构。当我想使用气泡排序对它们进行排序时

struct ccircular {
char a[50];
};

项目

struct ccircular *aux;
aux=(struct ccircular *)malloc(num*(sizeof(struct ccircular)));

功能

void ordenar(struct ccircular *aux,int num)
{
struct ccircular temp;
struct ccircular *orden;
orden=aux;
int i,j;
for (i=1;i<num;i++)
{
for (j=0;j<num;j++)
{
if(orden[j].a>orden[j+1].a)
temp=orden[j];
orden[j]=orden[j+1];
orden[j+1]=temp;    
}       
}
}

必须使用函数strcmp将两个字符串比较在一起,这在带有<>的C中是不可能的操作员。

我使用了一个优化的算法,循环停止,直到不再需要交换;这是因为经常发生的情况是,在一次传递中,交换了多个元素对。详细解释:Wikipedia Bubblesort

第一次,循环在不交换元素的情况下运行,它完成并停止

void ordenar(struct ccircular *aux, int num) {
int i;
bool swapped = false;
struct ccircular temp;
do {
swapped = false;
for (i = 0; i < (num-1); ++i) {
if (strcmp(aux[i].a, aux[i+1].a) > 0) {
temp = aux[i];
aux[i] = aux[i+1];
aux[i+1] = temp;
swapped = true;
}
}
num--;
} while (swapped == true);
}

最新更新