單鏈表實現氣泡排序演算法(C實現)
阿新 • • 發佈:2019-01-24
本實現主要採用交換指標的方法,其中附加有單鏈表及其相關的實現
#include <stdio.h> struct Node; typedef struct Node *PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; typedef int ElementType; struct Node { ElementType Element; Position Next; }; List initList() { List L = (List)malloc(sizeof(struct Node)); L->Next = NULL; return L; } void insertElement(List L) { int element; while(scanf("%d", &element)) { Position tmp = (Position)malloc(sizeof(struct Node)); tmp->Element = element; tmp->Next = L->Next; L->Next = tmp; } } void printList(List L) { Position P = L->Next; printf("L->"); while(P != NULL) { printf("%d - >", P->Element); P = P->Next; } printf("NULL\n"); } int get_length(List L) { int i = 0; Position P = L->Next; while(P != NULL) { i++; P = P->Next; } return i; } void BubblePoint(List L) { Position pre; Position cur; Position next; int i, j; i = get_length(L); printf("length = %d\n", i); while(i != 1) { pre = L; cur = L->Next; next = cur->Next; j = i; i--; while(j != 1) { j--; if(cur->Element > next->Element) { cur->Next = next->Next; pre->Next = next; next->Next = cur; pre = next; next = cur->Next; } else { pre = cur; cur = next; next = next->Next; } } } } int main(int argc, char **argv) { List L; L = initList(L); insertElement(L); printList(L); BubblePoint(L); printList(L); }
執行結果如下: