单链表实现冒泡排序算法

下面实现主要采用交换指针的方法,其中附加有单链表及其相关的实现

[cpp]  view plain  copy
  1. #include   
  2.   
  3. struct Node;  
  4.   
  5. typedef struct Node *PtrToNode;  
  6. typedef PtrToNode List;  
  7. typedef PtrToNode Position;  
  8. typedef int ElementType;  
  9.   
  10. struct Node  
  11. {  
  12.     ElementType Element;  
  13.     Position Next;  
  14. };  
  15.   
  16. List initList()  
  17. {  
  18.     List L = (List)malloc(sizeof(struct Node));  
  19.     L->Next = NULL;  
  20.         return L;  
  21. }  
  22.   
  23. void insertElement(List L)  
  24. {  
  25.     int element;  
  26.     while(scanf("%d", &element))  
  27.     {  
  28.         Position tmp = (Position)malloc(sizeof(struct Node));  
  29.         tmp->Element = element;  
  30.         tmp->Next = L->Next;  
  31.         L->Next = tmp;  
  32.     }  
  33. }  
  34.   
  35. void printList(List L)  
  36. {  
  37.     Position P = L->Next;  
  38.     printf("L->");  
  39.     while(P != NULL)  
  40.     {  
  41.         printf("%d - >", P->Element);  
  42.         P = P->Next;  
  43.     }  
  44.     printf("NULL\n");  
  45. }  
  46.   
  47. int get_length(List L)  
  48. {  
  49.     int i = 0;  
  50.     Position P = L->Next;  
  51.     while(P != NULL)  
  52.     {  
  53.         i++;  
  54.         P = P->Next;  
  55.     }  
  56.     return i;  
  57. }  
  58.   
  59. void BubblePoint(List L)  
  60. {  
  61.     Position pre;  
  62.     Position cur;  
  63.     Position next;  
  64.       
  65.     int i, j;  
  66.     i = get_length(L);  
  67.     printf("length = %d\n", i);  
  68.       
  69.     while(i != 1)  
  70.     {  
  71.         pre = L;  
  72.                 cur = L->Next;  
  73.                 next = cur->Next;  
  74.                 j = i;  
  75.         i--;  
  76.         while(j != 1)  
  77.         {  
  78.             j--;  
  79.             if(cur->Element > next->Element)  
  80.             {  
  81.                 cur->Next = next->Next;  
  82.                 pre->Next = next;  
  83.                 next->Next = cur;  
  84.                   
  85.                 pre = next;  
  86.                 next = cur->Next;  
  87.             }  
  88.             else  
  89.             {  
  90.                 pre = cur;  
  91.                 cur = next;  
  92.                 next = next->Next;  
  93.             }  
  94.         }  
  95.     }     
  96. }  
  97.   
  98. int main(int argc, char **argv)  
  99. {  
  100.     List L;  
  101.     L = initList(L);  
  102.     insertElement(L);  
  103.         printList(L);  
  104.     BubblePoint(L);  
  105.     printList(L);  
  106. }  

执行结果如下:

你可能感兴趣的:(C,/,C++,算法)