现在要来重新审视一下冒泡排序了
冒泡排序的原理是这样的
图片来自https://www.cnblogs.com/wk520hll/p/6414576.html
在清楚了冒泡排序的原理后,我写的一般是这样的
for(i = 0; i < n-1; i++)
for(j = 0; j < n-i-1; j++)
if(a[j]>a[j+1])
{
int temp = a[j];
a[j] = a[j+1]
a[j+1] = temp;
}
这样完成升序排列,并且在之后我这串代码背了下来。
但是,这是经过优化后的代码。
在想把链表排序的时候我发现不管怎么样我都用不上这串代码,如果要用上的话,就需要更多的用来记录位置的变量,这显然很麻烦。
后来发现冒泡排序不优化或者说彻头彻尾地暴力,似乎就可以用在链表上了。
像这样
for(i = 0; i < n-1; i++)
for(j = 0; j < n-1; j++)
if(a[j]>a[j+1])
{
int temp = a[j];
a[j] = a[j+1]
a[j+1] = temp;
}
这样的代码就可以很轻松地改写成链表的冒泡排序了
if(head == NULL)
return;
for(i = head; i->next!=NULL;i = i->next)
{
for(j = head; j->next!=NULL; j = j->next)
{
if(j->id > j->next->id)
{
int temp;
temp = j->id;
j->id = j->next->id;
j->next->id = temp;
}
}
}