第一天只简单学习了基本的三个算法:交换swap(),冒泡排序BubbleSort(),选择排序SelectSort()。
(1) void swap(int x, int y) —这个方法行不通
C语言的两种可行方式:
(1) 传指针:void swap(int *px, int *py)
#include
using namespace std;
void swap(int *px, int *py);
int main()
{
int a, b;
a = 1;
b = 10;
cout << "a = " << a << ", b = " << b << endl;
swap(a, b);
cout << "a = " << a << ", b = " << b << endl;
return 0;
}
void swap(int *px, int *py)
{
int tmp;
tmp = *px;
*px = *py;
*py = tmp;
}
(2) 宏函数: #define swap(x,y,t) ((t) = (x),(x) = (y), (y) = (t))
#include
#define SWAP(x,y,t) ((t) = (x),(x) = (y), (y) = (t))
using namespace std;
int main()
{
int a, b,tmp;
a = 1;
b = 10;
cout << "a = " << a << ", b = " << b << endl;
SWAP(a, b,tmp);
cout << "a = " << a << ", b = " << b << endl;
return 0;
}
C++新增的两种方法:
(3) 传引用:void swap(int &rx, int &ry)
#include
using namespace std;
void swap(int &rx, int &ry);
int main()
{
int a, b;
a = 1;
b = 10;
cout << "a = " << a << ", b = " << b << endl;
swap(a, b);
cout << "a = " << a << ", b = " << b << endl;
return 0;
}
void swap(int &rx, int &ry)
{
int tmp;
tmp = rx;
rx = ry;
ry = tmp;
}
(4) 模板函数:template void swap(T &x, T &y)
#include
using namespace std;
int main()
{
int a, b;
a = 1;
b = 10;
cout << "a = " << a << ", b = " << b << endl;
std::swap(a, b);
cout << "a = " << a << ", b = " << b << endl;
return 0;
}
*TIPS:*上述行不通的方法与C/C++语言中的传值方式有关。
从左向右扫描数据,选择最大的数据,放在右边
图例说明
图1 原始数据
图2 第一遍扫描结束图
图3 全部扫描结束图
要点:比较相邻的两个数,如果左边的数大于右边,就进行交换。
代码示例:
#include
using namespace std;
void BubbleSort(int list[], int n);
int main()
{
int a[] = { 2,4,6,8,0,1,3,5,7,9 };
BubbleSort(a, 10);
for (int k = 0; k < 10; k++)
cout << a[k] << " ";
cout << endl;
return 0;
}
void BubbleSort(int list[], int n)
{
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (list[j] > list[j + 1])
std::swap(list[j], list[j + 1]);
}
}
}
从当前未排序的整数中找一个最小的整数,将它放在已排序的整数列表的最后
图例说明:
图1 原始数据
图2 第一次扫描结束
图3 全部扫描结束图
要点:选择排序选最小的,往左边选
代码示例:
#include
using namespace std;
void SelectSort(int *a, const int n);
int main()
{
int a[] = { 2,4,6,8,0,1,3,5,7,9 };
SelectSort(a, 10);
for (int k = 0; k < 10; k++)
cout << a[k] << " ";
cout << endl;
return 0;
}
void SelectSort(int *list, const int n)
{
for (int i = 0; i < n - 1; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (list[j] < list[min])
min = j;
}
swap(list[i], list[min]);
}
}