ZZ:C++经典排序

本程序综合了几乎所有的排序方法。其中:
getdata(sample &s):用于获取对象s的数据
insertsort(sample &s):用于进行插入排序
shellsort(sample &s):用于进行希尔排序
bubblesort(sample &s):用于进行冒泡排序
quicksort(sample &s):用于进行快速排序
selectsort(sample &s):用于进行选择排序
disp(sample &s):用于数据输出
最后说明的是:这儿顺便展示了友元的用法
View Code
  1 #include <iostream.h>
2 #define max 100
3
4 class sample
5 {
6 int A[max];
7 int n;
8 friend class process;
9 public:
10 sample(){n=0;}
11 };
12
13 class process
14 {
15 void qsort(sample &s,int l,int h);//私有成员,由quicksort()成员调用
16 public:
17 void getdata(sample &s);
18 void insertsort(sample &s);
19 void shellsort(sample &s);
20 void bubblesort(sample &s);
21 void quicksort(sample &s);
22 void selectsort(sample &s);
23 void disp(sample &s);
24 };
25 void process::getdata(sample &s)//获取对象s的数据
26 {
27 int i;
28 cout<<元素个数 : ;
29 cin>>s.n;
30 for(i=0;i<s.n;i++)
31 {
32 cout<<输入第<<i+1<<个数据:;
33 cin>>s.A[i];
34 }
35 }
36 void process::insertsort(sample &s)//插入排序
37 {
38 int i,j,temp;
39 for(i=0;i<s.n;i++)
40 {
41 temp=s.A[i];
42 j=i-1;
43 while(temp<s.A[j])
44 {
45 s.A[j+1]=s.A[j];
46 j--;
47 }
48 s.A[j+1]=temp;
49 }
50 }
51 void process::shellsort(sample &s)//希尔排序
52 {
53 int i,j,gap,temp;
54 gap=s.n/2;
55 while(gap>0)
56 {
57 for(i=gap;i<s.n;i++)
58 {
59 j=i-gap;
60 while(j>=gap)
61 if(s.A[j]>s.A[j+gap])
62 {
63 temp=s.A[j];
64 s.A[j]=s.A[j+gap];
65 s.A[j+gap]=temp;
66 j=j-gap;
67 }
68 else j=0;
69 }
70 gap=gap/2;
71 }
72 };
73 void process::bubblesort(sample &s)//冒泡排序
74 {
75 int i,j,temp;
76 for(i=0;i<s.n;i++)
77 for(j=s.n-1;j>=i+1;j--)
78 {
79 if(s.A[j]<s.A[j-1])
80 {
81 temp=s.A[j];
82 s.A[j]=s.A[j-1];
83 s.A[j-1]=temp;
84 }
85 }
86 }
87 void process::quicksort(sample &s) //快速排序
88 {
89 qsort(s,0,s.n-1);
90 }
91 void process::qsort(sample &s,int l,int h)
92 {
93 int i=1,j=h,temp;
94 if(l<h)
95 {
96 temp=s.A[l];
97 do
98 {
99 while(j>i&&s.A[j]>=temp)
100 j--;
101 if(i<j)
102 {
103 s.A[i]=s.A[j];
104 i++;
105 }
106 while(i<j&&s.A[i]<=temp)
107 i++;
108 if(i<j)
109 {
110 s.A[j]=s.A[i];
111 j--;
112 }
113 }while(i<j);
114 s.A[i]=temp;
115 qsort(s,l,j-1);
116 qsort(s,j+1,h);
117 }
118 }
119 void process::selectsort(sample &s)//选择排序
120 {
121 int i,j,k,temp;
122 for(i=0;i<s.n;i++)
123 {
124 k=i;
125 for(j=i+1;j<=s.n-1;j++)
126 {
127 if(s.A[j]<s.A[k])
128 k=j;
129 }
130 temp=s.A[i];
131 s.A[i]=s.A[k];
132 s.A[k]=temp;
133 }
134 }
135 void process::disp(sample &s) //输出数据
136 {
137 for(int i=0;i<s.n;i++)
138 cout<<s.A[i]<< ;
139 cout<<endl;
140 }
141
142 void main() //主函数入口
143 {
144 int sel;
145 sample s;
146 process p;
147 p.getdata(s);
148 cout<<原来排序:;
149 p.disp(s);
150 cout<<选择排序方法:<<endl;
151 cout<<0 :插入排序 1 :希尔排序 2 :冒泡排序 3 :快速排序 4 :选择排序 其它退出 <<endl;
152 cout<<输入:;
153 cin>>sel;
154 switch(sel)
155 {
156 case 0:
157 p.insertsort(s);
158 cout<<插入排序结果:;
159 break;
160 case 1:
161 p.shellsort(s);
162 cout<<希尔排序结果:;
163 break;
164 case 2:
165 p.bubblesort(s);
166 cout<<冒泡排序结果:;
167 break;
168 case 3:
169 p.quicksort(s);
170 cout<<快速排序结果:;
171 break;
172 case 4:
173 p.selectsort(s);
174 cout<<选择排序结果:;
175 break;
176 }
177 p.disp(s);
178 }

posted @ 2012-02-15 12:26  ITfresh  阅读(153)  评论(0编辑  收藏  举报