C/C++学习——数组的应用(经典算法)

排序

一、冒泡排序
冒泡排序的基本思想是通过相邻两个记录之间的比较和交换,使关键码较小的记录逐渐从底部移向顶部(上升),关键码较大的记录从顶部移向底部(沉底),冒泡由此得名。(交换

C/C++学习——数组的应用(经典算法)_第1张图片


#include 
using namespace std;

int main()
{
	int A[7],temp;
	for (int i = 0; i < 7; i++)//输入元素
	{
		cin >> A[i];
	}
	for (int k = 0; k < 6; k++)//第k趟,注意6趟
	{
		for (int j = 0; j < 6 - k; j++)//每一趟,比较的次数,是6-k
		{
			if (A[j] > A[j+1])
			{
				temp = A[j];
				A[j] = A[j + 1];
				A[j + 1] = temp;
			}
		}
	}
	for (int l = 0; l < 7; l++)//输出
	{
		cout << A[l] << "  ";
	}
	cout << endl;

	return 0;
}

二、选择排序
选择排序法的基本思想是第i趟选择排序通过n-i次关键码的比较,从n-i+1个记录中选出关键码最小的记录,并和第i个记录进行比较。
(把最小值赋值给A[k],每个元素给A[k]进行比较)

C/C++学习——数组的应用(经典算法)_第2张图片

#include 
using namespace std;

void  SelectionSort(int A[], int n)
{
	int temp,k; 
	for (int i = 0; i < n-1; i++)//第i次循环
	{
		k = i;
		for (int j = i + 1; j < n; j++)//每次循环需要比较的次数
		{
			if (A[j] < A[k])//A[k]为最小元素
			{
				k=j;
			}
			
		}
		if (i != k)
		{
			temp = A[i];
			A[i] = A[k];
			A[k] = temp;
		}
		
	}
}

int main()
{
	int A[7];
	for (int i = 0; i < 7; i++)//输入元素
	{
		cin >> A[i];
	}

	SelectionSort(A, 7);
	for (int l = 0; l < 7; l++)//输出
	{
		cout << A[l] << "  ";
	}
	cout << endl;

	return 0;
}

查找

一、顺序查找:让关键字与序列中的数逐个比较,直到找出与给定关键字相同的数为止或序列结束,一般应用于无序序列查找。

#include 
using namespace std;

int search(int A[],int n,int find)
{
	for (int i = 0; i < n; i++)
	{
		if (A[i] == find)
			return i;
	}
	 return -1;
}
int main()
{
	int A[10] = { 12,23,4,5,65,768,87,67,7,20 };
	int idx = search(A, 10, 230);
	if (idx >= 0) {
		cout << idx << endl;
	}
	else cout << "not" << endl;
	return 0;
}

二、二分查找
对于有序序列,可以采用二分查法进行查找。
基本思想:
升序排列的n个元素集合A分成个数大致相同的两部分,取A[n/2]与预查找的find做比较,如果相等则表示找到find,算法终止,如果findA[n/2],则在A的后半部继续搜索find。

#include 

using namespace std;

void paixu(int A[],int n) {//选择排序;
	int temp;
	for (int i = 0; i < n - 1; i++)
	{
		int k = i;
		for (int j = i + 1; j < n; j++)
		{
			if (A[j] < A[k])//A[k]存放最小的值。
			{
				k = j;
			}
		}
		if (i != k) {
			temp = A[k];
			A[k] = A[i];
			A[i] = temp;
		}
	}
}
int insert(int A[], int n,int infind)
{
	int low, upper,mid;
	low = 0, upper = n - 1;
	while (low <= upper)
	{
		mid = low + (upper - low) / 2;//不用(upper + low) / 2,避免upper+low溢出
		if (A[mid] < infind) low = mid + 1;
		else if (A[mid] > infind) upper = mid - 1;
		else return mid;
	}
	return -1;
}
int main()
{
	int A[10];
	for (int i = 0; i < 10; i++)
	{
		cin >> A[i];
	}
	paixu(A,10);
	for (int j = 0; j < 10; j++)
	{
		cout << A[j] << "  ";
	}
	std::cout << endl;
	int b;
	cout << " 输入查找的数字:" << endl;
	cin >> b;
	int a = insert(A, 10, b);
	cout << a << endl;
	if (a >= 0) cout << a << endl;
	else cout << "not" << endl;

	return 0;
}

你可能感兴趣的:(c++学习笔记)