机试题目-day4(每日一写)

发布时间 2023-12-04 17:49:45作者: 小小卡拉咪

快排思想

int position(int * num,int left,int right)
{
int temp=num[left];//选出中值
while(left<right){  
    while(left<right&&num[right]>=temp)//从右开始,如果不符合指针一直向左
    right--;
    num[left]=num[right];//直到符合,开始交换
    while(left<right&&num[left]<temp)left++;//从左开始,如果不符合指针一直向右
    num[right]=num[left];//直到符合,开始交换,左边只要一交换就变换到右边,重复
     }  
num[left]=temp;//插入中值
return left;
}
void quicksort(int* sums,int p,int q)
{
     if(p>q)return;
     else{
         int point=position(sums,p,q);//找到中值
         quicksort(sums,p,point-1);//0-中值快排
         quicksort(sums,point+1,q);//中值到右边快排
     }
}
void merge(int* nums1, int nums1Size, int m1, int* nums2, int nums2Size, int n1) {
int m=m1;
int n=n1;
for(int i=m,j=0;i<nums1Size,j<n;i++,j++)
{nums1[i]=nums2[j];}
quicksort(nums1,0,nums1Size-1);
}