本文介绍一些常用的简单算法
冒泡排序
冒泡排序算法的原理如下:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序总的平均时间复杂度为O(n^2)
void func_a(char *data, char size)
{
char i,j;
for(i=0;i<size-1;i++){
for(j=i+1;j<size;j++){
if(data[i] > data[j]){
char tmp = data[j];
data[j] = data[i];
data[i] = tmp;
}
}
}
}
int main(int argc, char *argv)
{
int i;
char data[] = {1,5,2,3,6,3,3,3,9,111,23,4,6};
func_a(data, sizeof(data));
}
快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
void func_b(char *data, char left, char right)
{
char i,j;
char key;
if(left >= right) return;
i = left;
j = right;
key = data[left];
while(i < j){
while(i < j && key <= data[j]){
j--;
}
data[i] = data[j];
while(i < j && key >= data[i]){
i++;
}
data[j] = data[i];
}
data[i] = key;
func_b(data, left, i-1);
func_b(data, i+1, right);
}
合并两个有序数组,并排序
static void func(char *array1,char len1,char *array2,char len2,char *res)
{
char i = 0,j = 0,k = 0;
char min;
while(i < len1 && j < len2){
if(array1[i] > array2[j]){
min = array2[j];
j++;
}else{
min = array1[i];
i++;
}
res[k++] = min;
}
while(i < len1)
res[k++] = array1[i++];
while(j < len2)
res[k++] = array2[j++];
}
strstr的实现
char *strstr(const char *str1, const char *str2)
{
char *cp = (char*)str1;
char *s1, *s2;
if (!*str2)
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *)str2;
while (*s1 && *s2 && (*s1 == *s2))
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
持续更新中···