1.快速排序
void quicksort(int a[],int left,int right){
2.归并排序
void mergeArray(int a[],int left,int middle,int right,int b[]){//合并数组的算法
void mergeSort(int a[],int left,int right,int b[])
3.冒泡排序
void bubbleSort(int a[],int n)
4.二分查找
void binSort(int a[],int n)
5.直接插入排序
void insetr(int a[],int n)
1.快速排序
void quicksort(int a[],int left,int right){
int i=left;
int j=right;
int temp=a[left];//选择a[left]作为基准数
while(i!=j){
while(a[j]>=temp&&i<j) j--;//right往前找 ,且必须从优往左找
while(a[i]<=temp&&i<j) i++;//left往后找
if(i<j){
int p=a[i];
a[i]=a[j];
a[j]=p;//交换
}
a[left]=a[i];
a[i]=temp//最后确定基准数a[left]的位置
}
quicksort(a,left,i-1);//递归处理左半部分
quicksort(a,i+1,right);//递归处理右半部分
}
2.归并排序
void mergeArray(int a[],int left,int middle,int right,int b[]){//合并数组的算法
int i=left;
int j=middle+1;
int k=0;
while(i<=middle&&j<=right){
if(a[i]<=a[j]) b[k++]=a[i++];
else b[k++]=a[j++];
}
while(i<=middle) b[k++]=a[i++];
while(j<=middle) b[k++]=a[j++];
for(int t=0;t<k;t++)
a[left+k]=b[k];//最后结果存回a数组
}
void mergeSort(int a[],int left,int right,int b[]){
if(left<right){//注意边界条件
int middle=(left+right)/2;
mergeSort(a,left,middle,b);
mergeSort(a,middle+1,right,b);//递归,左边有序,右边有序
mergeArray(a,left,middle,right,b);合并数组
}
}
3.冒泡排序
void bubbleSort(int a[],int n){
for(int i=0;i<n-1;i++){//需要N-1次起泡
for(int j=0;j<n-1-i;j++){
if(a[j+1]<a[j]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}//后面的值大于前面的值,则交换,总是将当前最大的值起泡到后面
}
}
}
4.二分查找
void binSort(int a[],int n){
for(int i=1;i<n;i++){//从a[1]开始插入,a[0]默认放好了
int left=0;
int right=i-1;
while(left<=right){//边界条件
int middle=(left+right)/2;
if(a[i]<a[middle]) right=middle-1;
else left=middle+1;
}//二分查找插入点
for(int k=left;k<i;k++) a[k+1]=a[k];//插入点后元素依次往后挪
if(letf!=i) a[left]=a[i];//插入点插入元素
}
}
5.直接插入排序
void insetr(int a[],int n){
for(int i=1;i<n;i++){
int j=i-1;
while(j){
if(a[j]<a[i]) break;
j--;
}//寻找插入点
for(int k=j+1;k<i-1;k++) a[k+1]=a[k];//插入点后元素后移
a[j+1]=a[i]; //插入元素
}
}
6.堆排序,只会画图,不会写代码....