zoukankan      html  css  js  c++  java
  • 链表指针交换实现冒泡排序

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 /*
     4 链表指针交换实现冒泡排序:核心思想:1.每次都从头开始比较
     5                                     2.sh,p,q整体往前走一步(交不交换都要往前走)
     6                                     3.交换完之后p变成q,q变成p,整体往前走,下次交换就会出现混乱,所以p,q还要指向原来的位置才能整体往前走
     7 */
     8 typedef struct node
     9 {
    10     int data;
    11     struct node * next;
    12 }NODE;
    13 NODE * createList()
    14 {
    15     NODE * head = (NODE *)malloc(sizeof(NODE));
    16     head->next = NULL;
    17 
    18     return head;
    19 }
    20 void insertNode(NODE * head,int insertData)
    21 {
    22     NODE * sur = (NODE *)malloc(sizeof(NODE));
    23     sur->data = insertData;
    24 
    25     sur->next = head->next;
    26     head->next = sur;
    27 }
    28 void traverList(NODE * head)
    29 {
    30     head = head->next;
    31     while(head)
    32     {
    33         printf("%d
    ",head->data);
    34         head = head->next;
    35     }
    36 }
    37 int lenList(NODE *head)
    38 {
    39     int len = 0;
    40     head = head->next;
    41     while(head)
    42     {
    43         len++;
    44         head = head->next;
    45     }
    46 
    47     return len;
    48 }
    49 void pointerPopsort(NODE *head,int len)
    50 {
    51     NODE * sh,*p,*q,*temp;
    52     sh = p = q = NULL;
    53     for(int i = 0;i<len-1;i++)
    54     {
    55         //每次都从头开始比较
    56         sh = head;
    57         p = sh->next;
    58         q = p->next;
    59         for(int j = 0;j<len-1-i;j++)
    60         {
    61             if(p->data > q->data)
    62             {
    63                 //交换指针
    64                 sh->next = q;
    65                 p->next = q->next;
    66                 q->next = p;
    67                 
    68                 //交换完之后p变成q,q变成p,整体往前走,下次交换就会出现混乱,所以p,q还要指向原来的位置才能整体往前走
    69                 temp = p;
    70                 p = q;
    71                 q = temp;
    72             }
    73             //sh,p,q整体往前走一步(交不交换都要往前走)、
    74             sh = sh->next;
    75             p = p->next;
    76             q = q->next;
    77 
    78         }
    79     }
    80 }
    81 int main(void)
    82 {
    83     NODE * head = createList();
    84     for(int i = 0;i<50;i++)
    85         insertNode(head,rand()%100);
    86     traverList(head);
    87     int len = lenList(head);
    88     printf("排序后
    ");
    89     pointerPopsort(head,len);
    90     traverList(head);
    91 
    92     return 0;
    93 }
  • 相关阅读:
    请教提高上百万行数据insert速度的“经典”方法
    poj1411
    poj1422
    poj1661
    poj1664
    poj1405
    交往艺术与沟通技巧[推荐]
    不可不听的10个职场故事
    也谈如何“领导”你的领导
    十个让爱情稳固的经典好习惯
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9715938.html
Copyright © 2011-2022 走看看