level 6
小猿圈加加
楼主
算法在面试的时候经常会遇到,是不可避免的,只要你面试,肯定得会算法,冒泡、二分这些基础的算法估计实习的时候才会被面试到,稍微高级一点的算法快排,一般是毕业生、或者换工作的朋友都会被问到,小猿圈详细描述一下快排的思想和快排的算法,大家可以看一下。
//排序--快速排序法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
/*
快速排序
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小
,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,
以此达到整个数据变成有序序列。
快速排序:
第一步:在数据集之中,选择一个元素作为"基准"(pivot)
第二步:所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边
第三步:对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止
*/
//位置调换
void MySwap(int *arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
//一轮快速排序 single
int SingleSort(int *arr, int low, int high){
//获取枢轴
int pv = arr[low];
while (low < high){
//high向左移动
while (low<high&&arr[high] >= pv){
high--;
}
//此时 high下标的元素的值不大于枢轴 可以调换位置
MySwap(arr, low, high);
//注意 此时枢轴的位置在high上 high的值就是Pv
//low向右移动
while (low<high&&arr[low]< pv){
low++;
}
//此时 low下标的元素的值大于枢轴 可以调换位置
MySwap(arr, low, high);
//注意 此时枢轴的位置在low上 low的值就是Pv
}
//返回最终pv所在的位置 此时必定 low==high
return low;
}
2019年06月24日 07点06分
1
//排序--快速排序法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
/*
快速排序
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小
,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,
以此达到整个数据变成有序序列。
快速排序:
第一步:在数据集之中,选择一个元素作为"基准"(pivot)
第二步:所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边
第三步:对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止
*/
//位置调换
void MySwap(int *arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
//一轮快速排序 single
int SingleSort(int *arr, int low, int high){
//获取枢轴
int pv = arr[low];
while (low < high){
//high向左移动
while (low<high&&arr[high] >= pv){
high--;
}
//此时 high下标的元素的值不大于枢轴 可以调换位置
MySwap(arr, low, high);
//注意 此时枢轴的位置在high上 high的值就是Pv
//low向右移动
while (low<high&&arr[low]< pv){
low++;
}
//此时 low下标的元素的值大于枢轴 可以调换位置
MySwap(arr, low, high);
//注意 此时枢轴的位置在low上 low的值就是Pv
}
//返回最终pv所在的位置 此时必定 low==high
return low;
}