1、冒泡排序
根据比较两个关键字结果来对换其位置(每次确定一个元素的最终位置)。
平均时间复杂度:O()
/*
函数功能:采用冒泡排序算法对任意整型数组进行任意排序
order 为 0 表示升序,1 表示降序
*/
void bubble_sort(int num[], int size, int order)
{
int tmp, flag;
for(int i = 0; i < size - 1; i++)
{
flag = 1;
for(int j = 0; j < size - 1 - i; j++)
{
if(order ? (num[j] < num[j + 1]) : (num[j] > num[j + 1]))
{
tmp = num[j];
num[j] = num[j + 1];
num[j + 1] = tmp;
flag = 0;
}
}
}
}
2、选择排序
每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
平均时间复杂度:O()
/*
函数功能:采用选择排序算法对任意整型数组进行任意排序
order 为 0 表示升序,1 表示降序
*/
void select_sort(int num[], int size, int order)
{
int tmp;
for(int i = 0; i < size - 1; i++)
{
for(int j = i + 1; j < size; j++)
{
if(order ? (num[j] > num[i]) : (num[j] < num[i]))
{
tmp = num[j];
num[j] = num[i];
num[i] = tmp;
}
}
}
}
3、插入排序
每次拿一个数尾插,然后和前一个数进行比较,如果不满足升序或者降序的规则就进行交换,一直到满足条件为止。
平均时间复杂度:O()
/*
函数功能:采用插入排序算法对任意整型数组进行任意排序
order 为 0 表示升序,1 表示降序
*/
void insert_sort(int num[], int size, int order)
{
int tmp;
for(int i = 1; i < size; i++)
{
tmp = num[i];
for(int j = i - 1; j >= 0; j--)
{
if(order ? (num[j] > tmp) : num[j] < tmp) break;
num[j + 1] = num[j];
}
num[j + 1] = tmp;
}
}
4、快速排序
任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
平均时间复杂度:O(n*logn)
/*
函数功能:采用插入排序算法对任意整型数组进行任意排序
order 为 0 表示升序,1 表示降序
*/
void quick_sort(int* num, int size, int order)
{
int i = 0, j = size - 1;
int key = num[0];
int tmp;
if(size < 2) return;
while(i != j)
{
while(i != j && (order ? (num[j] <= key) : (num[j] >= key)))j--;
num[i] = num[j];
while(i != j && (order ? (num[i] >= key) : (num[i] <= key))) i++;
num[j] = num[i];
}
num[i] = key;
//将左边部分和右边部分进行递归处理
quick_sort(num, i, order);
quick_sort(num + i + 1, size - i - 1, order);
}