#define MAX_SIZE 20
typedef struct
{int key;
}ElemType;
typedef struct
{ElemType* R;int length;
}Sqlist;void Create(Sqlist* L)
{int i, n;printf("请输入数据个数,不能超过%d\n", MAX_SIZE);scanf("%d", &n);while (n>MAX_SIZE){printf("数据个数超过总数,请重新输入\n");scanf("%d", &n);}L->R = (ElemType*)malloc(sizeof(ElemType) * (MAX_SIZE + 1));L->length = 0;printf("请输入元素内容:\n");for (i = 0; i < n; i++){scanf("%d", &L->R[i].key);L->length++;}
}
void BubbleSort(Sqlist* L)
{int i, j;for (i = 0; i < L->length - 1; i++){for (j = 0; j < L->length - 1 - i; j++){if (L->R[j].key > L->R[j + 1].key){ElemType temp = L->R[j + 1];L->R[j + 1] = L->R[j];L->R[j] = temp;}}}
}
void printNode(Sqlist L)
{for (int i = 0; i < L.length; i++){printf("%d ", L.R[i].key);}
}
int main()
{Sqlist L;Create(&L);BubbleSort(&L);printNode(L);return 0;
}
链式存储结构如下:
typedef struct Node
{int data;struct Node* next;
}Node;
Node* Create(int data)
{Node* newnode = (Node*)malloc(sizeof(Node));if (newnode == NULL){perror("error:");exit(1);}newnode->data = data;newnode->next = NULL;
}
Node* CreateArr(int arr[], int size)
{Node* newnode = Create(arr[0]);Node* temp = newnode;for (int i = 1; i < size; i++){temp->next = Create(arr[i]);temp = temp->next;}return newnode;
}
void printNode(Node* node)
{Node* temp = node;while (temp){printf("%d->", temp->data);temp = temp->next;}printf("NULL\n");
}
void FreeNode(Node* node)
{Node* temp = node;while (temp){Node* pcur = temp->next;free(temp);temp = pcur;}
}
void BubbleSort(Node** headRef)
{Node* head = *headRef;Node* end = NULL;while (head->next != end){Node* temp = head;while (temp->next!=end){Node* pcur = temp->next;if (temp->data >pcur->data){int node = pcur->data;pcur->data = temp->data;temp->data = node;}temp = temp->next;}end = temp;//9 8 .....}
}
int main()
{int arr[] = { 4,3,5,1,9,6 };int size = sizeof(arr) / sizeof(arr[0]);Node* node = CreateArr(arr, size);printf("初始遍历:\n");printNode(node);BubbleSort(&node);printf("排序后的遍历:\n");printNode(node);FreeNode(node);return 0;
}