算法设计常用的四种排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
index=i; for(int j=i+1;j<=n;j++){
if(r[j]<r[index])index=j; count++; } if(index!=i)
swap(r[i],r[index]); }cout<<"选择排序运行次数:"<<count<<endl; } void swap(int& a ,int& b)//交换 { int c=0; c=a; a=b; b=c; } void BubbleSort(int r[],int n)//起泡排序 { int count=0; for(int i=1;i<=n-1;i++)
信息技术学院信息与计算科学 Jackiedc
吉林农业大学算法设计与分析 1.初始化一个长度为 r[]的数组; 2.若开始小于结尾
2.1 问题分解,pivot 是轴值在序列序列中的位置; 2.2 递归地对左侧子序列进行快速排序; 2.3 递归地对右侧子序列进行快速排序;
#include<iostream>
//归并排序
void Merge(int r[],int r1[],int s,int m,int t);
//合并有序子序列
void MergeSort(int r[],int r1[],int s,int t);
//归并排序
int Partition(int r[],int first,int end);
//一次划分
பைடு நூலகம்
void QuickSort(int r[],int first,int end);
//快速排序
int count=0;
int number=0;
int main()
{
int r[12]={9,78,25,23,4,68,75,30,26,44,20,33};
int r1[12];
SelectSort(r,12);
cout<<"选择排序:";
for(int i(0);i<12;i++)
cout<<r[i]<<" ";
cout<<endl;
BubbleSort(r,12);
cout<<"起泡排序:";
for(int j(0);j<12;j++)
cout<<r[j]<<" ";
cout<<endl;
MergeSort(r,r1,0,11);
{
pivot=Partition(r,first,end); //问题分解,pivot 是轴值在序列中的位置
QuickSort(r,first,pivot-1); //递归地对左侧子序列进行快速排序
QuickSort(r,pivot+1,end); //递归地对右侧子序列进行快速排序
}
}
信息技术学院信息与计算科学 Jackiedc
信息技术学院信息与计算科学 Jackiedc
吉林农业大学算法设计与分析
count++; int m=0;int count=0; if(s==t)
r1[s]=r[s]; else { m=(s+t)/2; MergeSort(r,r1,s,m); MergeSort(r,r1,m+1,t); Merge(r1,r,s,m,t); count++; } //cout<<"归并排序运行次数:"<<count<<endl;
cout<<"归并排序运行次数:"<<count<<endl;
cout<<"归并排序:";
for(int q=0;q<12;q++)
cout<<r[q]<<" ";
cout<<endl;
信息技术学院信息与计算科学 Jackiedc
吉林农业大学算法设计与分析
QuickSort(r,0,11); cout<<"快速排序运行次数:"<<number<<endl; cout<<"快速排序:";
}
if(i<=m)
while(i<=m)
r1[k++]=r[i++];
else
while(j<=t)
{
r1[k++]=r[j++];
}
for(int l=0;l<12;l++)
r[l]=r1[l];
}
int Partition(int r[],int first,int end)//一次划分
{
int i;int j;
using namespace std;
void SelectSort(int r[],int n);
void swap(int& a ,int& b);
//交换排序
void BubbleSort(int r[],int n);
//起泡排序
void MergeSort(int r[],int r1[],int s,int t);
for(int j=1;j<=n-i;j++) {
if(r[j]>r[j+1]) swap(r[j],r[j+1]); count++; } cout<<"起泡排序运行次数:"<<count<<endl; } void MergeSort(int r[],int r1[],int s,int t)//归并排序 {
吉林农业大学算法设计与分析
四种排序方法:
一、选择排序: 1. 初始化一个长度为 r[]的数组;
1.1 数组下标从 1 开始; 2. for(i=1;i<=n-1:i++)
2.1 for(j=i+1;j<=n:j++) 2.2 在无序区中找最小记录; 2.3 若最小记录不在最终位置则交换; 二、起泡排序: 1.初始化一个长度为 r[]的数组; 1.1 数组下标从 1 开始; 2.for(i=1;i<=n-1;i++) 2.1 for(j=1;j<=n-i;j++) 2.2 如果反序,则交换元素; 三、 归并排序: 1.初始化一个长度为 r[]的数组; 2.若 s==t 则 r1[s]=r[s]; 2.1 m=(s+t)/2; 2.2 归并排序前半子序列; 2.3 归并排序后半子序列; 2.4 合并两个已排序的子序列; 四、快速排序:
//左侧扫描
i++;
if(i<j)
{
swap(r[j],r[i]);
//将较大记录交换到后面
j--;
}
}
return i;
//i 为轴值记录的最终的位置
}
void QuickSort(int r[],int first,int end)//快速排序
{ number++;
int pivot;
if(first<end)
}
void Merge(int r[],int r1[],int s,int m,int t)//合并有序子序列
{ int i;int j;int k;
i=s;j=m+1;k=s;
while(i<=m&&j<=t)
{
if(r[i]<=r[j])
r1[k++]=r[i++];
else r1[k++]=r[j++];
i=first;j=end;
//初始化
while(i<j)
{
while(i<j&&r[i]<=r[j])
//右侧扫描
j--;
if(i<j)
信息技术学院信息与计算科学 Jackiedc
吉林农业大学算法设计与分析
{
swap(r[i],r[j]);
//将较小记录交换到前面
i++;
}
while(i<j&&r[i]<=r[j])
for(int d=0;d<12;d++) cout<<r[d]<<" ";
cout<<endl;
return 0; } void SelectSort(int r[],int n)//选择排序 { int count=0;
int index=0; for(int i=0;i<=n-1;i++) {
相关文档
最新文档