算法设计常用的四种排序

算法设计常用的四种排序
算法设计常用的四种排序

四种排序方法:

一、选择排序:

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 合并两个已排序的子序列;

四、快速排序:

1.初始化一个长度为r[]的数组;

2.若开始小于结尾

2.1问题分解,pivot是轴值在序列序列中的位置;

2.2递归地对左侧子序列进行快速排序;

2.3递归地对右侧子序列进行快速排序;

#include

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); //归并排序

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<

cout<

BubbleSort(r,12);

cout<<"起泡排序:";

for(int j(0);j<12;j++)

cout<

cout<

MergeSort(r,r1,0,11);

cout<<"归并排序运行次数:"<

cout<<"归并排序:";

for(int q=0;q<12;q++)

cout<

cout<

QuickSort(r,0,11);

cout<<"快速排序运行次数:"<

cout<<"快速排序:";

for(int d=0;d<12;d++)

cout<

cout<

return 0;

}

void SelectSort(int r[],int n)//选择排序

{ int count=0;

int index=0;

for(int i=0;i<=n-1;i++)

{

index=i;

for(int j=i+1;j<=n;j++){

if(r[j]

count++;

}

if(index!=i)

swap(r[i],r[index]);

}cout<<"选择排序运行次数:"<

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++)

for(int j=1;j<=n-i;j++)

{

if(r[j]>r[j+1])

swap(r[j],r[j+1]);

count++;

}

cout<<"起泡排序运行次数:"<

void MergeSort(int r[],int r1[],int s,int t)//归并排序

{

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<<"归并排序运行次数:"<

}

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++];

}

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;

i=first;j=end; //初始化

while(i

{

while(i

j--;

if(i

{

swap(r[i],r[j]); //将较小记录交换到前面

i++;

}

while(i

i++;

if(i

{

swap(r[j],r[i]); //将较大记录交换到后面

j--;

}

}

return i; //i为轴值记录的最终的位置

}

void QuickSort(int r[],int first,int end)//快速排序

{ number++;

int pivot;

if(first

{

pivot=Partition(r,first,end); //问题分解,pivot是轴值在序列中的位置

QuickSort(r,first,pivot-1); //递归地对左侧子序列进行快速排序

QuickSort(r,pivot+1,end); //递归地对右侧子序列进行快速排序}

}

相关主题
相关文档
最新文档