合并排序
一、实验目的与要求
1、熟悉合并排序算法;
2、初步掌握分治算法;
二、实验题目
采用递归与非递归两种方式实现合并排序算法
参考输入、输出:
输入:输入第一行包括一个整数n,第二行包含n个整数,以空格间隔。
输出:输出一行n个整数,代表排序结果。
Simple input:
4
1 5 4 12
Simple output:
1 4 5 12
三、实现思想
将未排序序列先不断对半分割,直至每块数量为1个,再将每块两两组合排序,新形成的序列均为有序序列。
四、实现代码
#include<iostream>
#include<cstdlib>
using namespace std;
void merge(int A[],int p,int q,int r)
{
int i=p;
int j=q+1;
int k=0;
//int *temp = (int *)malloc((r-p+1)*sizeof(int));
int *temp=new int[r-p+1];
while(i<=q&&j<=r)
{
if(A[i]<=A[j])
temp[k++]=A[i++];
else
temp[k++]=A[j++];
}
int star=i,end=q;
if(j<=r)
{
star=j;
end=r;
}
while(star<=end)
{
temp[k++]=A[star++];
}
for(int i=0;i<=r-p;i++)
{
A[p+i]=temp[i]; //这里犯过错误,注意A[p+i]这里,我们排序是根据传入的数组范围
}
//free(temp);
delete []temp;
}
void merge_sort_c(int A[],int p,int r)
{
if(p>=r)
return;
int q=(p+r)/2;
merge_sort_c(A,p,q);
merge_sort_c(A,q+1,r);
merge(A,p,q,r);
}
void merge_sort(int A[],int n)
{
merge_sort_c(A,0,n-1);
}
int main()
{
int A[6]={3,2,7,4,5,1};
merge_sort(A,6);
for(int i=0;i<6;i++)
cout<<A[i]<<" ";
return 0;
}
五、实验结果
快速排序
一、实验目的与要求
1、熟悉快速排序算法;
2、初步掌握分治算法;
二、实验题目
实现快速排序算法
参考输入、输出:
输入:输入第一行包括一个整数n,第二行包含n个整数,以空格间隔。
输出:输出一行n个整数,代表排序结果。
Simple input:
4
1 5 4 12
Simple output:
1 4 5 12
三、实现思想
选取一个基准点,将序列排序,使基准点的左侧元素小于基准点,右侧的元素大于基准点;剩下的两个部分重复上述操作,选基准点分割。
四、实现代码
#include<iostream>
using namespace std;
//从一端扫描
/*int partition(int A[],int p,int r)
{
int pivot=A[r];
int i=p;
for(int j=p;j<=r-1;j++)
{
if(A[j]<pivot)
{
swap(A[i],A[j]);
i++;
}
}
swap(A[i],A[r]);
return i;
}
//两个指针从两端扫描
int partition(int A[],int p,int r)
{
int pivot=A[p];
int left=p+1;
int right=r;
while(left<=right){
while(left<=right&&A[left]<=pivot)
left++;
while(left<=right&&A[right]>pivot)
right--;
if(left<right)
swap(A[left],A[right]);
}
swap(A[p],A[right]);
return right;
}*/
void quick_sort_c(int A[],int p,int r)
{
if(p>=r)
return;
int q=partition(A,p,r);
quick_sort_c(A,p,q-1);
quick_sort_c(A,q+1,r);
}
void quick_sort(int A[],int n)
{
quick_sort_c(A,0,n-1);
}
int main()
{
int A[10]={9,5,8,6,3,4,7,2,1,0};
quick_sort(A,10);
for(int i=0;i<10;i++)
cout<<A[i]<<" ";
return 0;
}
五、实验结果