个人主页:仍有未知等待探索-CSDN博客
欢迎指教!
目录
一、冒泡排序(稳定)
1、思想:
两两进行交换,然后将最大值(最小值)放在最后面。
2、时间复杂度:
最坏的情况是:O(n^2)
平均的情况是:O(n^2)
3、代码:
// 冒泡排序
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
void BubbleSort(int a[], int n)
{
for (int i = 0; i < n - 1; i ++ )
{
// 一趟
// 排升序
for (int j = 0; j < n - 1 - i; j ++ )
{
if (a[j] > a[j + 1]) swap(&a[j], &a[j + 1]);
}
}
}
int main()
{
// 设置一个种子
srand(time(0));
int a[10];
for (int i = 0; i < 10; i ++ ) a[i] = rand() % 10;// 产生随机数
BubbleSort(a, 10);
for (int i = 0; i < 10; i ++ ) printf("%d ", a[i]);
return 0;
}
二、快速排序 (不稳定)
1、思想:
(升序)保证一个数key的左边的数小于key,其右边的数大于key。
2、时间复杂度:
最坏的情况:O(n^2)
平均的情况:O(nlogn)
3、代码:
// 快排模板
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
void QuickSort(int a[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = a[(l + r) >> 1];
while (i < j)
{
do i ++; while (a[i] < x);
do j --; while (a[j] > x);
if (i < j) swap(&a[i], &a[j]);
}
QuickSort(a, l, j);
QuickSort(a, j + 1, r);
}
int main()
{
srand(time(0));
int a[10];
for (int i = 0; i < 10; i ++ ) a[i] = rand() % 10;
QuickSort(a, 0, 9);
for (int i = 0; i < 10; i ++ ) printf("%d ", a[i]);
return 0;
}