自己写了一个合并排序的算法,出现问题,自己总结!
记录一下!
1 // paixu.cpp : Defines the entry point for the console application.
2 //
3
4 #include "stdafx.h"
5 #include "iostream.h"
6
7 void mergeSort(int a[],int b[]);//函数使用前的通知
8 void paixu(int n[]);
9
10
11 int main(int argc, char* argv[])
12 {
13 int a[6]={47,1,8,14,12,41};
14 int b[6]={6,85,4,5,56,14}; //两个数组
15 cout<<"排序前数组a:";
16 for(int q=0;q<6;q++) //数组管理,一定用到了 循环
17 cout<<a[q]<<"";
18 cout<<endl;
19
20 cout<<"排序前数组b:";
21 for(int p=0;p<6;p++)
22 cout<<b[p]<<"";
23 cout<<endl;
24
25
26
27 paixu(a);
28 paixu(b);//下面 跳到paixu()函数
29
30
31 cout<<"合并排序以后新数组 c:"<<endl;
32 mergeSort(a,b);
33 return 0;
34 }
35
36
37 //合并函数,用来将排好序列的数组每一个元素比较并且合并到一起
38 void mergeSort(int a[],int b[])
39 {
40 int c[12]={0};
41 int i=0,
42 k=0,
43 j=0;
44 while(i<6&&j<6)
45 {
46 if(a[i]<b[j])
47 c[k++]=a[i++];
48 else
49 c[k++]=b[j++];
50
51
52 }
53
54 if(i>j)//偷懒算法-----== 呵呵,只要有一个没有运算完就把它全部给了C数组
55 for(int q=j;q<6;q++)
56 c[k++]=b[q];
57 else
58 for(int q=i;q<6;q++)
59 c[k++]=b[q];
60
61 for(int w=0;w<12;w++)
62 cout<<c[w]<<"";
63 cout<<endl;
64
65 }
66
67
68
69 //采用冒泡排序首先将两个数组分别排好序列
70 void paixu(int a[]) /*定义两个参数:数组首地址与数组大小*/ //没有用引用?我也是这么想的原来 数组的名本来就是一个地址,放心的改变吧,就是它在改变
71 {
72 int i,j,temp;
73 for(i=0;i<6-1;i++)
74 for(j=i+1;j<6;j++) /*注意循环的上下限*/
75 if(a[i]>a[j]) {
76 temp=a[i];
77 a[i]=a[j];
78 a[j]=temp;
79 }
80 }