冒泡排序的原理
将临近元素依次进行比较,如果顺序不符合要求就调整到正确的顺序。如有n个元素就进行 n - 1趟这样的比较,每趟比较可以将一个最值元素位置确定下来,这样的排序算法称为冒泡排序
测试代码
/*
冒泡排序算法
时间复杂度为O(n^2)
*/
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable: 4996)
#define LIST_MAX_SIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef char DataType[10];
typedef int KeyType;
typedef struct{
KeyType key;
DataType data;
}Node;
typedef Node List[LIST_MAX_SIZE];
Status Swap(Node *L1, Node *L2)
{
Node temp;
temp = *L1;
*L1 = *L2;
*L2 = temp;
return OK;
}
/*
按递增的顺序,冒泡排序
*/
Status BubbleSort_1(List L, int n)
{
int i, j;
for (i = 0; i < n - 1; ++i){ //需要检查n - 1次,将n - 1个元素进行归位
for (j = 0; j < n - 1 - i; ++j){//每次归位的是最后一个元素,减而治之剩下的元素
if (L[j].key > L[j + 1].key){
Swap(&L[j], &L[j + 1]);
}
}
}
return OK;
}
/*
按照递减的顺序进行冒泡排序
*/
Status BubbleSort_2(List L, int n)
{
int i, j;
for (i = 0; i < n - 1; ++i){
for (j = 0; j < n - 1 - j; ++j){
if (L[j].key < L[j + 1].key){
Swap(&L[j], &L[j + 1]);
}
}
}
return OK;
}
/*
可以将排好序的元素放置在左侧位置
*/
Status BubbleSort_3(List L, int n)
{
int i, j;
for (i = 0; i < n - 1; ++i){
for (j = i; j < n - 1; ++j){
if (L[j].key < L[j + 1].key){
Swap(&L[j], &L[j + 1]);
}
}
}
return OK;
}
int main()
{
List L;
int n, i;
KeyType a[] = { 12, 32, 43, 124, 454, 23, 12, 45, 565 };
n = sizeof(a) / sizeof(a[0]);
for (i = 0; i < n; ++i){
L[i].key = a[i];
}
BubbleSort_1(L, n);
printf("递增顺序为: \n");
for (i = 0; i < n; ++i){
printf("%d ", L[i].key);
}
printf("\n");
BubbleSort_3(L, n);
printf("递减顺序为: \n");
for (i = 0; i < n; ++i){
printf("%d ", L[i].key);
}
printf("\n");
system("pause");
return 0;
}