您的位置:首页 > 其它

单链表排序(冒泡排序法)

2016-05-22 19:18 295 查看
思想很简单,不再赘述,实现见代码:

#include <iostream>

typedef struct node
{
int data;
struct node *next;
} NODE;

NODE *create_end(int arr[], int len)
{
NODE *head = (NODE *)malloc(sizeof(NODE *));
head->next = NULL;
NODE *end = head;

for (int i = 0; i < len; i++) {
NODE *p =  (NODE *)malloc(sizeof(NODE *)); // 也可用 new NODE();
p->data = arr[i];

end->next = p;
end = p;
}
end->next = NULL;

return head;
}

// 此方法适用于不带头节点的单链表的打印,对于带头节点的单链表要稍作处理。
void print(NODE *head)
{
if (head == NULL) return;

while (head != NULL) {
printf("%d\n",head->data);
head = head->next;
}
}

// 单链表排序(采用-冒泡排序法)(适用于-不带头节点的单链表)
// 对于带头节点的单链表来说,在传参时,要稍作调整。
void sortList(NODE *head)
{
NODE *p = head;
NODE *q = head;
int temp;
for (; p->next; p = p->next) { // 确定比较次数

for (q = head; q->next; q = q->next) {
if (q->data > q->next->data) {

temp = q->data;
q->data = q->next->data;
q->next->data = temp;
}
}

}
}

int main(int argc, const char * argv[]) {

int arr[] = {6,2,5,4,3,7,1};
int len = sizeof(arr)/sizeof(int);

NODE *head = create_end(arr, len);

// 因为创建的链表是带头节点的,所以此处打印要稍作处理;
NODE *first = head->next;
print(first);

printf("----------------------\n");

NODE *first_2 = head->next;
sortList(first_2);
print(head->next);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: