思路
冒泡排序
1.每次排序交换总能把当前未排序元素的最大值放到未排序元素元素的末尾,这样就变成已排序的数组
2.每次排好已排序好的数组以后,就不用去交换
代码
//冒泡
#include<stdio.h>
typedef int ElementType;
void printf_array(int a[],int N)
{
printf("\n");
for (int i = 0; i < N; i++)
printf("%d ", a[i]);
}
void swap(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void bubble_sort(int a[],int N)
{
int flag;
for (int j = N - 1; j >= 0; j--)
{
flag = 0;//没有发生交换,停止循环标记
for (int i = 0; i < j; i++)//一次冒泡完成
{
if (a[i] > a[i +1])
{
swap(&a[i-1], &a[i ]);
flag = 1;//发生了交换,继续
}
}
if (flag==0) break;//无交换
}
}
int main() {
int arr[5] = { 1,5,9,8,7 };
printf_array(arr, 5);
bubble_sort(arr,5);
printf_array(arr, 5);
return 0;
}
结论
这里加了个flag标记,是我以前学c的时候没想到的。以前考试的时候,都是直接两个for写的。
冒泡排序法:
最好情况:顺序T=O(N)
最坏情况:逆序T=O(N^2)