1. 交换两个数
1.1 临时变量
swap(int *pa, int *pb)
{
int tmp = 0;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
1.2 赋值运算————大数容易溢出
swap(int *pa, int *pb)
{
*pa = *pa + *pb;
*pb = *pa - *pb;
*pa = *pa - *pb;
}
1.3 位运算
swap(int *pa, int *pb)
{
*pa = *pa ^ *pb;
*pb = *pa ^ *pb;
*pa = *pa ^ *pb;
}
swap(int *pa, int *pb)
{
*pa ^= *pb;
*pb ^= *pa;
*pa ^= *pb;
}
1.4 注释:
左值: 写权限
右值: 只读权限
2. 冒泡排序
1. What:
- 在无序区的元素中,
- 比较相邻元素的关键字对应的值,
- 交换那些不满足次序要求的偶对,直到全部满足为止。
2.How:
static void BubbleSort (int A[], int n)
{
int i = 0;
int j = 0;
int exchange = 0;
for (i = 0; i < n-1; ++i) /* n 个数最多需要 n-1 趟排序才能满足次序的要求 */
{
exchange = 0; /* 经过一趟排序后, 检查相邻的元素是否发生过交换 */
for (j = n-1; j > i; --j) /* 从后往前两两比较相邻的元素, 每趟比较后使得一个元素归位。*/
{
if (A[j-1] > A[j])
{
swap(&A[j-1], &A[j]);
exchange = 1;
}
}
if (0 == exchange)
{
return ;
}
}
}
3.Why:
- 每一趟排序使得一个元素归位,有序区的元素一定小于(顺序)[大于(逆序)]无序区的元素,因此是全局有序的。
- A[j-1] > A[j] 保证了冒泡排序算法的稳定性。
- j > i 保证每次的比较都在无序区。