zl程序教程

您现在的位置是:首页 >  后端

当前栏目

单链表排序——交换数据成员

排序数据 成员 交换 单链
2023-09-27 14:28:32 时间

仿冒泡函数,对一个Words型结构体链表排序,全部代码[单链表]统计文本中英文单词出现次数,并输出前200个单词及其出现次数

void WordsSort(Words *headWord)
{
	if(headWord->next == NULL)	return;	//链表为空无法排序
	Words *flg_word = NULL;				//标记,每次循环结束时指向本次循环的最大值地址,同时也可做终止条件,仿冒泡
	int flag;							//优化冒泡,标记是否发生了交换
	while(flg_word != headWord->next)	//类似于冒泡排序中内循环的条件语句 j<n-i-1
	{                                                    //或flg_word > headWord->next
		flag = 0;
		Words *pos = headWord->next;	//当前    pos[j]
		Words *pos_next = pos->next;	//下一个  pos[j+1]

		while(pos_next != NULL)			//条件基本用不上,可写为死循环
		{
			if(pos->count < pos_next->count)
			{
				SwapWord(pos,pos_next);		//交换数据函数
				flag = 1;
			}

			if(pos_next->next == flg_word)
			{
				flg_word = pos_next;		//相当于flg_word每次向前移动一个位置
				break;						//提前退出,后面的已经有序
			}
			pos = pos->next;
			pos_next = pos_next->next;

		}
		if(flag == 0)	break;			//没有交换,该链表(数列……)已为有序,无需再排序
	}

}