数据结构与算法(C++实现)学习笔记(一)

数据结构与算法(C++实现)学习笔记(一)

第一天只简单学习了基本的三个算法:交换swap(),冒泡排序BubbleSort(),选择排序SelectSort()。

最基本的算法:交换(swap)

(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++语言中的传值方式有关。

冒泡排序法BubbleSort( )

从左向右扫描数据,选择最大的数据,放在右边
图例说明
数据结构与算法(C++实现)学习笔记(一)_第1张图片
图1 原始数据
数据结构与算法(C++实现)学习笔记(一)_第2张图片
图2 第一遍扫描结束图
数据结构与算法(C++实现)学习笔记(一)_第3张图片
图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]);
		}
	}
}

选择排序法 SelectSort( )

从当前未排序的整数中找一个最小的整数,将它放在已排序的整数列表的最后
图例说明
数据结构与算法(C++实现)学习笔记(一)_第4张图片
图1 原始数据
数据结构与算法(C++实现)学习笔记(一)_第5张图片
图2 第一次扫描结束
数据结构与算法(C++实现)学习笔记(一)_第6张图片
图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]);
	}
}

你可能感兴趣的:(数据结构与算法(C++实现)学习笔记(一))