void merge(int A[], int low, int middle, int high)
{
int *B = new int[high - low + 1];
int i = low;
int j = middle + 1;
int k = low;
while(i <= middle && j <= high)
{
if(A[i] <= A[j]) B[k++] = A[i ++];
else B[k++] = A[j++];
}
while(i <= middle)
B[k++] = A[i ++];
while(j <= high)
B[k++] = A[j++];
for(i = low; i <= high; i ++)
A[i] = B[i];
}
void mergesort(int A[], int low, int high)
{
int middle;
if(low < high)
{
middle = (low + high) / 2;
mergesort(A, low, middle);
mergsort(A, middle + 1, high);
merge(A, low, middle, high);
}
}
void Merge(int r[],int r1[],int s,int m,int t){
int i=s;
int j=m+1;
int k=s;
while(i<=m&&j<=t){
if(r[i]<=r[j])
r1[k++]=r[i++];
else
r1[k++]=r[j++];
}
if(i<=m)
while(i<=m)
r1[k++]=r[i++];
else
while(j<=t)
r1[k++]=r[j++];
for(int n=s;n<=t;n++)
r[n]=r1[n];
}
void MergeSort(int r[],int r1[],int s,int t){
if(s<t){
int m=(s+t)/2;
MergeSort(r,r1,s,m);
MergeSort(r,r1,m+1,t);
Merge(r,r1,s,m,t);
}
}
int fun(int a[],int i,int j)
{
int pivot = a[i];
while(i < j)
{
while(i<j && pivot <= a[j]) j--;
if(i < j)
{
swap(a[i],a[j]);
i++;
}
while(i < j && a[i] < pivot) i++;
if(i<j)
{
swap(a[i],a[j]);
j--;
}
}
return j;
}
void Quick_Sort(int a[],int s,int t)
{
int i;
if(s < t)
{
i=fun(a, s, t);
Quick_Sort(a, s, i-1);
Quick_Sort(a, s+1, t);
}
}
int main(){
int r[8]={10,3,5,3,9,34,54,565};
Quick_Sort(r,0,7);
for(int q=0;q<8;q++)
cout<<""<<r[q]<<" ";
return 0;
}
快排和归并排序部分代码
最新推荐文章于 2022-09-04 21:43:36 发布
这段代码展示了归并排序和快速排序的实现。归并排序通过递归地将数组分成两半,然后合并已排序的子数组。快速排序使用分区操作来选择一个基准元素,并重新排列数组,使得所有小于基准的元素都在其之前,大于基准的在其之后,然后对子数组进行递归排序。最后,提供了一个main函数来测试快速排序的实现。
摘要由CSDN通过智能技术生成