内部排序:冒泡排序算法

来源:互联网 发布:淘宝店一件代销赚钱吗 编辑:程序博客网 时间:2024/06/06 08:32

 

冒泡排序的思想很简单,如果要求排序后序列中元素按照从小到大的顺序排列,则冒泡排序的步骤如下:

    1、依次比较序列中相邻的两个元素,将较大的放在后面,这样一趟比较后,最大的元素就放在了最后的一个位置;

    2、再依次比较相邻的两个元素,将第二大的元素最终放到倒数第二个位置;

    3、依次循环,直到最小的元素放在了第一个位置,排序完成。

    根据以上思想,代码如下:

 

//排序结果是由小到大void Bubble_Sort(int *arr,int len) {       int i,j,exchange;      for(i=0; i<len-1; i++) { //i记录排序趟次,也即排好序个数        for(j=0; j<len-i-1; j++) {             if(arr[j] > arr[j+1]) {                exchange = arr[j];                  arr[j] = arr[j+1];                  arr[j+1] = exchange;              }}    }  }


根据以上的思想,实现以下题目:

请定义一个单链表,并用冒泡法对其进行排序。

//单链表的定义typedef struct _node { int data; struct _node * next;} //使用子函数 相邻数据交换。void swap_nodedata(node *pl,node *p2) {    int temp = p1->data;    p1->data = p2->data;    p2->data = temp}node * bubble_sort(node *head) {    node *p;    int n,temp;    n  = length(head);//计算链表长度    if(head==NULL || head->next==NUll) {       return head;    }    p = head;    for(int i=1; i<n; ++i) {        p = head;   //每一趟排序都是从链表的首部开始        for(int j=1; j<n-i; ++j) {            if(p->data > p->next->data) {                swap_nodedata(p,p->next);            }            p = p->next;//p指向当前操作的链表。        }    }}
0 0
原创粉丝点击