swap:交换两个变量的值
类似三变量交换法
/*
* 实参传形参时,
* 形参临时复制实参的存储空间,
* 在临时分配的空间对a,b进行改变,
* 函数执行完成后,形参分配的空间自动释放,
* 最终,形参所做的任何变化对实参无影响,
* a与b的值换交换不成功
*/
void swap(int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
运行如下👇 变量没交换成功
5 2
a=5, b=2
result of swap_1: a=5, b=2
指针传参
//指针传参
#include <stdio.h>
void swap_4(int *a, int *b);
int main() {
int a,b;
scanf("%d%d",&a,&b);
printf("a=%d, b=%d\n", a, b);
swap_4(&a, &b);
printf("result of swap:\ta=%d, b=%d\n", a, b);
return 0;
}
void swap_4(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
运行如下👇
5 3
a=5, b=3
result of swap: a=3, b=5
快速排序—填坑法思想
难点:如何找基准?
JAVA 核心代码
快速排序算法
//快速排序算法
int Partition(int *r,int left,int right)
{
int pivot;//枢轴
pivot=r[left];//从枢轴从左开始
while(left<right)//挖坑填数
{
while(left<right&&r[right]>=pivot)//右:找比pivot小的数(枢轴从左边开始,就先处理右边;否则相反)
{
right--;
}
r[left]=r[right];
while(left<right&&r[left]<=pivot)//左:找比pivot大的数
{
left++;
}
r[right]=r[left];
}
//pivot插在中间
r[left]=pivot; //此时left==right,所以写成 r[right]=Pivot也可以
return left; //同理,此处写成return right 也可
}
void Quick_Sort(int *r,int left,int right)
{
int PivotLoc;//枢轴的位置
if(left<right)//区间划分的条件,当left==right;即划分的区间只有一个元素时,退出递归!
{
PivotLoc=Partition(r,left,right);//第一趟快排,获取枢轴位置PivotLoc
Quick_Sort(r,left,PivotLoc-1); //递归处理枢轴左边
Quick_Sort(r,PivotLoc+1,right); //递归处理枢轴右边
}
}
void QuickSort(int *r)//初始数据源的预输入
{
Quick_Sort(r,0,Maxsize-1);
}
总结
越来越依赖他人的代码,只想坐享其成,头脑不灵活。