排序算法
交换排序
基本思想:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求则进行交换,直到整个序列满足要求为止。
分类:根据交换思想的不同,可以将交换排序分为:冒泡排序和快速排序。
1.冒泡排序
- 冒泡排序是一种最简单的交换排序算法,通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一般逐渐往上“漂浮”,或者使关键字大的记录如石块一样逐渐向下“坠落”
- 分析:时间复杂度O(n^2),空间复杂度O(1),算法稳定。
#include <stdio.h>
//常规版本的冒泡排序
void BubbleSort(int * S, int n)
{
int i, j, temp;
for(i = 1; i <= n-1; i++) //排序几趟
{
for(j = 1; j <= n-i; j++) //每趟比较几次
{
if(S[j-1] > S[j]) //存在逆序
{
temp = S[j-1];
S[j-1] = S[j]; //进行交换
S[j] = temp;
}
}
}
}
//改进版本的冒泡排序(增加一个标志位flag)
void NewBubbleSort(int * S, int n)
{
int i, j, temp;
int flag = 1;
for(i = 1; i<=n-1 && flag==1; i++