今天主要的内容是利用指针实现快速排序、strncpy、strncat、strncmp实现、回调函数以及指针+二维数组
首先讲一下快速排序
快速排序的思想是:
step1:选择一个基准值 // a[0]
step2:从右边开始找,找比基准值小的值
step3:从左边开始找,找比基准值大的值
step4:交换找到的值
step5:重复step2——step4步骤,直到begin与end相遇
step6:此时将相遇位置上的值与基准值交换
step7:针对小于、大于基准值的部分,分别继续进行快速排序递归调用
eg:示例代码
#include<stdio.h>
void sort_print(int *begin,int *end) //输出
{
for(;begin <= end;++begin)
{
printf("%d ",*begin);
}
putchar('\n');
}
void swap(int *num1,int *num2) //交换值
{
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
void quick_sort(int *begin,int *end) //快速排序
{
int *p = begin;
int *q = end;
int *k = begin;
if(begin > end)
{
return;
}
while(begin < end)
{
while(begin < end && *k > *end)
{
--end;
}
while(begin < end && *k < *begin)
{
++begin;
}
swap(begin,end);
}
swap(begin,k);
quick_sort(p,end-1);
quick_sort(begin+1,q);
}
int main(void) //主函数
{
int array[] = {
5,6,8,1,4,3,2,9,0,7};
int len = sizeof(array) / sizeof(array[0]);
quick_sort(array,array+len-1);
sort_print(array,array+len-1);
return 0;
}
输出结果如下图所示:
接下来讲一下strncpy、strncat、strncmp实现过程
首先是strncpy
char *strncpy(char *dest, const char *src, size_t n)
{
正常拷贝,但是形参上多了一个n
当n < strlen(src)
只拷贝前n个字符,最终dest中不会有'\0'
当n == strlen(src)
正常拷贝
当n > strlen(src)
if (n