如何对这样的结构进行排序:
git log origin/master
其中一个属性,如价格或重量?先前声明了Automobil数组。 我不能使用指针和任何其他内置函数。
typedef struct
{
int weight;
int price;
Color color;
Equip equip;
}Cars;
我尝试这样做,但它没有做任何事...... 另外,如果有人能告诉我,我怎么能把像这样的结构传递给函数我真的很感激!
答案 0 :(得分:2)
好吧,首先你要做的事情并不像有些人可能会告诉你的那样糟糕,因为小N泡泡排序仍然非常快。以下是你的,当然你需要一个双循环:
int main() {
Cars automobil[NC];
// Initialiase automobil here
for (int i = 0; i < NC - 1; ++i) {
int am = i;
for (int j = i+1; j < NC; ++j) {
if ( automobil[am].weight > automobil[j].weight )
am = j;
}
if ( am != i) {
Cars tmp = automobil[am];
automobil[am] = automobil[i];
automobil[i] = tmp;
}
}
for (int i = 0; i < NC; ++i)
printf("%d\n", automobil[i].weight);
}
请注意,我们可以复制结构但是在这里我们尽可能少地尝试。
然而,它很容易说出来&#34;我将永远不会超过十辆汽车&#34;然后发现你正试图排序数千,所以我会敦促你学习和理解qsort():
int carsSort(const void *a, const void *b) {
return ((Cars *) a)->weight - ((Cars *) b)->weight;
}
int main() {
Cars automobil[NC];
// Initialiase automobil here
qsort(automobil, NC, sizeof *automobil, carsSort);
for (int i = 0; i < NC; ++i)
printf("%d\n", automobil[i].weight);
}
约翰
PS:回复&#34;如何将数组传递给函数?&#34;记住K&amp; R的许多明智的说法之一:&#34;当一个数组名称传递给一个函数时,传递的是数组开头的位置&#34;。
因此:
int carsSort(const void *a, const void *b) {
return ((Cars *) a)->weight - ((Cars *) b)->weight;
}
void sortThem(Cars autom[]) {
qsort(autom, NC, sizeof *autom, carsSort);
}
int main() {
Cars automobil[NC];
// Initialiase automobil here
sortThem(automobil);
for (int i = 0; i < NC; ++i)
printf("%d\n", automobil[i].weight);
}
在sortThem()&#34; autom&#34;是一个变量,其值是automobil [0]的地址。
答案 1 :(得分:1)
这里没有进入实现细节是一个冒泡排序的程序算法(不在C中): Bubble Sort Algorithm 。请注意,如注释中所述,此冒泡排序实现使用嵌套循环。
要记住的另一个项目:为了切换两个对象,需要使用相同类型的第三个临时对象。例如:
int temp
int arr1[]={2,5,7,2,9,1,8,0,5,2,1};
int count = sizeof(arr1)/sizeof(arr1[0])
for(int i = 0; i < count-1; i++ )
{
if(arr1[i]>arr1[i+1])
{
temp = arr1[i];
arr1[i] = arr1[i+1];
arr[i+1] = temp;
}
}
因为您要对成员集合中的单个成员进行排序,所以每次交换条件存在时,分配交换例程都需要交换每个成员,即尽管确定交换条件exists仅考虑一个成员,交换将包括所有成员:weight
,price
,Color
和Equip
。并且,如果Color
和Equip
属于struct
类型(您的帖子未指定),则还需要交换属于要比较的数组元素的这些对象的每个成员。
您应该期待最终使用指针,因为这将显着减少完成此排序所需的赋值语句的数量。