算法:
解决问题的方法和步骤(数据结构所具备的功能)
五个特点:有穷性、确切性、输入项、输出项、可行性
评定一个算法的好坏:
时间复杂度:随着输入项的变法,算法运算的次数,一般采用大O表示法
快 ----->----->------->------->------>慢
O(1) > O(logn) > O(n) > O(nlogn) > O(n^2) > O(2^n) > O(n!)
空间复杂度:随着输入项的变化,算法所需要内存的变量,一般采用大O表示法
正确性
可读性
健壮性
排序算法:
头文件 以及遍历和测试函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define ARR_LEN 10
#define swap(a,b) {typeof(a) t=a; a=b; b=t;}
void show_arr(const char* sort_name,int *arr,int len)
{
printf("%s: [",sort_name);
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\b]\n");
}
void test_sort(int *arr,int len)
{
show_arr(__func__,arr,len);
}
冒泡排序:
特点:对数据的有序性敏感,一旦排序完成就能停止。
时间复杂度: 最优:O(n) 最差:O(n^2)
void bubble_sort(int* arr, int len)
{
show_arr("show before",arr,len);
bool flag = true;
for(int i = len-1;i>0 && flag;i--)
{
flag = false;
for(int j=0; j<i ;j++)
{
if(arr[j]>arr[j+1])
{
swap(arr[j],arr[j+1]);
flag = true;
}
}
}
show_arr(__func__,arr,len);
}
选择排序:
特点:但交换数据的次数比其他算法少很多。
时间复杂度: O(n^2)
void