目录
数组元素打印
void printArray(int *begin,int *end)
{
while(begin<=end)
{
printf("%d ",*begin++);
}
putchar('\n');
}
void printArray(int *begin, int *end)
:该函数是一个无返回值的函数,它接收两个参数,分别是指向数组起始位置的指针begin
和指向数组结束位置的指针end
while(begin<=end)这个循环会遍历从begin指向的位置到end指针指向的位置(包括end指针指向的位置)
*begin++先取begin指针指向的值,再将begin指针递增
元素交换
void swap(int *a,int *b)
{
int t = *a;
*a = *b;
*b = t;
}
void swap(int *a, int *b)
:该函数是一个无返回值的函数,它接收两个参数,分别是指向整数类型变量的指针a
和b
。
int t = *a;声明了一个整型变量t,并将指针*a 所指向的值赋给t。t保存*a的值
*a = *b;将指针b所指向的值赋给指针a所指向的位置,此时a所指的变量被赋予了b所指向的值
*b = t; t的值赋给指针b所指向的位置,此时b所指向的变量被赋予最初a所指向的值
指针操作变量的值——指针可以访问和修改变量所指内存地址中的值
求max
void maxArray(int *a,int len)
{
int max = *(a+0);
int i = 0;
for(i = 1;i<len;i++)
{
if(max<*(a+i))
max = *(a+i);
}
printf("max = %d\n",max);
}
void maxArray(int *a, int len)
:该函数是一个无返回值的函数,它接收两个参数,一个是指向整型数组的指针a
,另一个是数组的长度len
。
int max = *(a+0); *(a+0)等价于a[0],*a
选择排序
void choiceSort(int *begin,int *end)
{
int *p = begin;
int *q = NULL;
for(p=begin;p<end;p++)
{
for(q=p+1;q<=end;q++)
{
if(*p>*q)
{
swap(p,q);
}
}
}
}
void choieSort(int *begin, int *end)
:该函数是一个无返回值的函数,它接收两个参数,分别是指向数组起始位置的指针begin
和指向数组结束位置的指针end
。
if(*p>*q)是选择排序算法的关键比较步骤
这里以升序为例——选择排序的工作原理是反复地找到未排序部分中的最小值,并将其与未排序部分的第一个元素交换,直到整个数组有序(找到当前位置的最小值,并将其放到适当的位置)
外层循环:指针p遍历数组的每一个元素。在每次迭代中,指针指向的是当前未排序部分的第一个元素
内层循环:指针q遍历p之后的每一个元素,用于找到未排序部分的最小值
if(*p>*q)的作用是比较当前元素*p和剩余未排序部分的元素*q
如果*p>*q说明p指向的元素大于q指向的元素,需要交换位置
冒泡排序
void bubbleSort(int * begin,int *end)
{
int *p = begin;
int *q = NULL;
for(p=end;p>begin;p--)
{
for(q = begin;q<p;q++)
{
if(*q>*(q+1))
{
swap(q,(q+1));
}
}
}
void bubbleSort(int *begin, int *end)
:该函数是一个无返回值的函数,它接收两个参数,分别是指向数组起始位置的指针begin
和指向数组结束位置的指针end
。
for(p=end;p>begin;p--)外层循环控制循环次数
p = end表示初始化p为数组最后一个元素的指针,每次循环结束后,p 向前移动一个位置
外层循环的目的是逐步缩小未排序的范围,因为在每一轮内层循环结束时,当前范围内最大的元素会被移动到正确的位置
for(q=begin;q<p;q++)
q=begin表示初始化q为数组第一个元素的指针
q用于遍历当前未排序部分的所有元素
插入排序
void insertSort(int *begin,int *end)
{
int *p;
int *q;
int t;
for(p=begin+1;p<=end;p++)
{
t = *p;
q = p;
while(q>0 && t<*(p-1))
{
swap(*p,*(p-1));
q--;
}
}
*q = t;
}
void insertSort(int *begin, int *end)
:该函数是一个无返回值的函数,它接收两个参数,一个是指向整型数组起始位置的指针begin
,另一个是指向数组结束位置的指针end
。
q = p;
这行代码的目的是将指针
q
初始化为p
的位置,即指向当前正在处理的元素。
q
在后续的while
循环中会逐步向前移动,以找到适当的位置插入当前元素t
。通过
q
的移动,逐步腾出位置,以便将当前元素插入到正确的位置。
*q = *p;
这行代码会将
p
指向的值直接赋给q
指向的值。这意味着值复制,而不是指针的初始化。如果在这里写
*q = *p;
,那就不会改变q
本身指向的位置,而只是改变q
所指向位置的值。