-
Notifications
You must be signed in to change notification settings - Fork 0
/
BubbleSort.c
123 lines (112 loc) · 2.2 KB
/
BubbleSort.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <stdio.h>
//1、未改进。
//void BubbleSort(int a[], int len)
//{
// int i = 0;
// int j = 0;
// for( i = 0; i < len-1; i++)
// {
// for( j = 0; j < len-i-1; j++ )
// {
// if(a[j]>a[j+1])
// {
// *(a+j) = *(a+j) ^ *(a+j+1);
// *(a+j+1) = *(a+j) ^ *(a+j+1);
// *(a+j) = *(a+j) ^ *(a+j+1);
// }
// }
// }
//}
//2、改进后(设置变量pos记录最后交换的位置)。
//void BubbleSort(int a[], int len)
//{
// int i = len - 1;
// int j = 0;
// while( i )
// {
// int pos = 0; //每趟循环开始前,还未交换
// for( j = 0; j < i; j++)
// {
// if( a[j] > a[j+1] )
// {
// *(a+j) = *(a+j) ^ *(a+j+1);
// *(a+j+1) = *(a+j) ^ *(a+j+1);
// *(a+j) = *(a+j) ^ *(a+j+1);
// pos = j; //记录交换的位置
// }
// }
// i = pos; //下趟只需比较到pos位置处就ok
// }
//
//}
//3、再改进后(每趟比较两次,分别找出一个最大值和一个最小值)。
void BubbleSort(int a[], int len)
{
int j = 0;
int low = 0;
int high = len - 1;
while(low<high)
{
for( j = low; j<high; j++)
{
if(a[j]>a[j+1])
{
*(a+j) = *(a+j) ^ *(a+j+1);
*(a+j+1) = *(a+j) ^ *(a+j+1);
*(a+j) = *(a+j) ^ *(a+j+1);
}
}
high--;
for( j = high; j>low; j--)
{
if(a[j]>a[j+1])
{
*(a+j) = *(a+j) ^ *(a+j+1);
*(a+j+1) = *(a+j) ^ *(a+j+1);
*(a+j) = *(a+j) ^ *(a+j+1);
}
}
low++;
}
}
//void BubbleSort(int a[])
//{
// int len = sizeof(a)/sizeof(a[0]);
// for( int i = 0; i < len-1; i++)
// {
// for( int j = 0; j < len-i-1; j++ )
// {
// if(a[j]>a[j+1])
// {
// //int t = *(a+j);
// //*(a+j) = *(a+j+1);
// //*(a+j+1) = t;
// *(a+j) = *(a+j) ^ *(a+j+1);
// *(a+j+1) = *(a+j) ^ *(a+j+1);
// *(a+j) = *(a+j) ^ *(a+j+1);
// }
// }
// }
//}
//主函数
int main()
{
void BubbleSort(int *a, int l); //void BubbleSort(int *a);
int arr[] = {398,37,687,65,456,998,876,156,587,294};
int i = 0;
int j = 0;
int len = sizeof(arr)/sizeof(arr[0]);
printf("排序前: ");
for( i = 0; i < len; i++ )
{
printf("%d ", *(arr+i));
}
BubbleSort(arr,len); //BubbleSort(arr);
printf("\n排序后: ");
for( i = 0; i < len; i++ )
{
printf("%d ", *(arr+i));
}
printf("\n");
return 0;
}