匿名用户
1级
2017-02-25 回答
01.#include
02.#include
03.
04./*
05.* 冒泡法排序。从小到大排序。
06.*
07.*/
08.void Bubble(int str[],int n)
09.{
10. int i;
11. int j;
12. int temp;
13. for(i=0;i
14. {
15. for(j=i+1;j
16. {
17. if(str[i]>str[j])
18. {
19. temp=str[i];
20. str[i]=str[j];
21. str[j]=temp;
22. }
23. }
24. }
25.}
26./*
27.*选择法。类似于冒泡。
28.*区别是标记记号K,比较元素由a[i],a[j]变为a[k],a[j].
29.*/
30.void Choose(int str[],int n)
31.{
32. int i;
33. int j;
34. int k;
35. int temp;
36. for(i=0;i
37. {
38. k=i;//标记
39. for(j=i+1;j
40. {
41. if(str[k]>str[j])
42. k=j;//k总是指向最小元素
43. if(i!=k)
44. {
45. temp=str[i];
46. str[i]=str[k];
47. str[k]=temp;
48. }
49. }
50. }
51.}
52.
53./*
54.*插入法;
55.*比较直观,首先将数组前两个元素排好序,再依次插入后面合适的元素。
56.*/
57.void Insert(int str[],int n)
58.{
59. int i;
60. int j;
61. int temp;
62. for(i=1;i
63. {
64. temp=str[i];
65. j=i-1;
66. while(j>=0&&temp
67. {
68. str[j+1]=str[j];
69. j--;
70. }
71. str[j+1]=temp;
72. }
73.}
74.
75./*
76.*快排法;
77.*通过一次排序将数组分为独立的两部分,其中一部分的所用数据比另一部分都要小。
78.*然后再对两部分独立排序,递归进行。
79.*/
80.void Quick(int str[],int i,int j)
81.{
82. int m,n,temp;
83. int k;
84. m=i;
85. n=j;
86. k=str[(m+n)/2];
87. do
88. {
89. while(str[m]
90. m++;
91. while(str[n]>k&&n>i)
92. n--;
93. if(m<=n)
94. {
95. temp=str[m];
96. str[m]=str[n];
97. str[n]=temp;
98. m++;
99. n--;
100. }
101. }while(m<=n);
102. if(m
103. Quick(str,m,j);
104. if(n>i)
105. Quick(str,i,n);
106.}
107./*
108.*shell排序;一种插入排序法。
109.*
110.*/
111.void Shell(int str[],int n)
112.{
113. int i;
114. int j;
115. int k;
116. int temp;
117.
118. k=n/2;
119. while(k>=1)
120. {
121. for(i=k;i
122. {
123. temp=str[i];
124. j=i-k;
125. while(j>=0&&temp
126. {
127. str[j+k]=str[j];
128. j=j-k;
129. }
130. str[j+k]=temp;
131. }
132. k=k/2;
133. }
134.}
135.
136.int main(int argc,char *argv[])
137.{
138. int str1[]={1,4,2,3,5,7,9,0,8,6};
139. int str2[]={1,4,2,3,5,7,9,0,8,6};
140. int str3[]={1,4,2,3,5,7,9,0,8,6};
141. int str4[]={1,4,2,3,5,7,9,0,8,6};
142. int str5[]={1,4,2,3,5,7,9,0,8,6};
143. int i;
144.
145. Bubble(str1,10);
146. printf("Bubble sort:\n");
147. for(i=0;i<10;i++)
148. {
149. printf("%d ",str1[i]);
150. }
151. printf("\n");
152.
153. Choose(str2,10);
154. printf("Choose sort:\n");
155. for(i=0;i<10;i++)
156. {
157. printf("%d ",str2[i]);
158. }
159. printf("\n");
160.
161. Insert(str3,10);
162. printf("Insert sort:\n");
163. for(i=0;i<10;i++)
164. {
165. printf("%d ",str3[i]);
166. }
167. printf("\n");
168.
169. Quick(str4,0,9);
170. printf("Quick sort:\n");
171. for(i=0;i<10;i++)
172. {
173. printf("%d ",str4[i]);
174. }
175. printf("\n");
176.
177. Shell(str5,10);
178. printf("Shell sort:\n");
179. for(i=0;i<10;i++)
180. {
181. printf("%d ",str5[i]);
182. }
183.
184.}