链接:十大经典排序算法(动画演示)


# 冒泡排序

PNode p,q;//PNode 是结构体指针
	
for (p = head->next; p != NULL; p = p->next)
    //p 赋值为数据域的第一个元素,遍历一遍
   for (q = p->next; q != NULL; q = q->next)
        // 相当于是将 p 和其后的所有元素比较
     if(p->data>q->data)//
     {
       int tp = p->data; p->data = q->data; q->data = tp;      }

# 选择排序

PNode p,q,Min;//PNode 是结构体指针
for (p = head->next; p != NULL; p = p->next)
    // 假定 p 为所有元素的最小值
    for (q = p->next; q != NULL; q = q->next)
        //p 和其后所有比较,有小于 p 的话交换位置
      if(p->data>q->data)//
      {
         Min=q
      }

# 快速排序

void QuickSort(linklist *head,linklist * tail)
{
	// 递归结束条件:当只有 head 与 tail 元素时结束,因为每次我们传进来 mid 其实 mid 已经不用排序,如果只有两个元素而 mid 不需要排序则递归结束
	if (head->next==tail)
	{
		return ;
	}
	//p 连接的是比 mid 小的值的链表,q 连接是比 mid 大值的链表并且包括 mid
	listPoint mid=head->next;
	listPoint p=head;
	listPoint q=mid;
	listPoint t=mid->next;
	int pivot=mid->key;
	while (t!=tail)
	{
		if (t->key<pivot)
		{
			p=p->next=t;
		}
		else
		{
			q=q->next=t;
		}
		t=t->next;
	}
	//p 链表连接上 q 链表 
	p->next=mid;
	q->next=tail;//q 链表尾部指向 NULL 
	QuickSort(head,mid);// 递归调用 QuickSort
	QuickSort(mid,tail);
}

C 语言链表快速排序


挖个坑... 未完待续...

更新于