算法设计基础之排列、整数划分、归并排序(VC)

算法设计基础之排列、整数划分、归并排序(VC)
算法设计基础之排列、整数划分、归并排序(VC)

实验内容:

1. 排列

1、代码

#include

using namespace std;

template

void Perm(T list[], int k, int m) //;排列子函数{ //生成list [k:m ]的所有排列方式

int i;

if (k == m) {//输出一个排列方式

for (i = 0; i <= m; i++)

cout << list [i];

cout << endl;

}

else // list[k:m ]有多个排列方式

// 递归地产生这些排列方式

for (i=k; i <= m; i++)

{

Swap (list[k], list[i]);

Perm (list, k+1, m);

Swap (list [k], list [i]);

}

}

template

inline void Swap(T& a, T& b) //交换子函数

{

T temp = a; a = b; b = temp;

}

void main() //主函数

{

int a[] = {1,2,3,4,5,6,7,8};

Perm(a,0,3); //调用全排列子函数,a[0]~a[3]的全排列}

2、运行结果

2. 整数划分

1、代码

#include

int a[100]={0};

void shuchu(int m) //输出函数{

int i;

for(i=0;i<=m-1;i++)

printf("%d ",a[i]);

printf("\n");

}

void fenjie(int n,int m) //分解函数{

int i;

if(n==0)

shuchu(m); //给的数字为0 ,输出0

else //若不为0,递归调用直到根节点 for(i=n;i>=1;i--)

if(m==0||i<=a[m-1])

{

a[m]=i;

fenjie(n-i,m+1);

}

}

void main(void) //主函数

{

int n,i,m=0;

printf("please input a number(0

scanf("%d",&n); //输入要分解的整数

fenjie(n,m); //调用函数

}

2、运行结果

3. 归并排序

1、代码

#include

#include

void merge(int number[],int first,int last,int mid)

{

int number_temp[10]={0};

int i=first,j=mid+1,k;

for(k=0;k<=last-first;k++)

{

if (i==mid+1)

{

number_temp[k]=number[j++];

continue;

}

if (j==last+1)

{

number_temp[k]=number[i++];

continue;

}

if (number[i]

}

for (i=first,j=0;i<=last;i++,j++)

number[i] = number_temp[j];

}

void merge_sort(int number[],int first,int last)

{

int mid=0;

if(first

{

mid=(first+last)/2;

merge_sort(number,first,mid);

merge_sort(number,mid+1,last);

merge(number,first,last,mid);

}

}

int main()

{

int number[10]={0},n,i;

scanf("%d",&n);

for(i=0;i

scanf("%d",&number[i]);

merge_sort(number,0,n-1);

for(i=0;i

printf("%d ",number[i]);

system("pause");

return 0;

}

2、运行结果

第一个数字输入排序数字个数,后面输入要排序的数字

相关文档
最新文档