一维数组算法(选择排序、冒泡排序、插入与删除、二分法查找)

数组算法

选择法排序

#define  N  10
#include<iostream>
using namespace std;

int main()
{
    
    
	int a[N], i, j, imax;
	cout << "原一维数组:";
	for (i = 0; i < N; i++)
	{
    
    
		a[i] = rand() % 101;              //生成0~100之间的随机数
		cout << a[i] << '\t';
	}
	for (i = 0; i < N - 1; i++)
	{
    
    
		imax = i;
		for (j = i + 1; j < N; j++)      //找到该区间最大元素的下标
		{
    
    
			if (a[j] > a[imax])
			{
    
    
				imax = j;
			}
		}
			int temp;
			temp = a[imax];             //交换该区间起点与最大元素
			a[imax] = a[i];
			a[i] = temp;
	}
	cout << endl;
	cout << "排序后(大到小)的一位数组:" << '\n';
	for (i = 0; i < N; i++)
	{
    
    
		cout << a[i] << '\t';
	}
	/*
    cout << "排序后(小到大)的一位数组:" << '\n';
	for (i = N-1; i >=0; i--)
	{
		cout << a[i] << '\t';
	}
	*/
	return 0;
}

冒泡法排序

#define  N  10
#include<iostream>
using namespace std;

int main()
{
    
    
	int a[N], i, j, temp;
	cout << "原一维数组:";
	for (i = 0; i < N; i++)
	{
    
    
		a[i] = rand() % 101;              //生成0~100之间的随机数
		cout << a[i] << '\t';
	}
	for (i = 0; i < N - 1; i++)
	{
    
    
		for(j=0;j<N-1-i;j++)
			if (a[j+1] > a[j])
			{
    
    
				temp = a[j+1];
				a[j+1] = a[j];
				a[j] = temp;
			}
	}
	cout << endl;
	cout << "排序后(大到小)的一位数组:" << '\n';
	for (i = 0; i < N; i++)
	{
    
    
		cout << a[i] << '\t';
	}
	/*
    cout << "排序后(小到大)的一位数组:" << '\n';
	for (i = N-1; i >=0; i--)
	{
		cout << a[i] << '\t';
	}
	*/
	return 0;
}

插入与删除

//插入
#define  N  10
#include<iostream>
using namespace std;

int main()
{
    
    
	int a[N], i, k, x, n;
	cout << "输入数组现有元素的个数:";
	cin >> n;
	cout << "请输入数组:" << '\n';
	for (i = 0; i < n; i++)
	{
    
    
		cin >> a[i];
	}
	cout << "输入待插入的数据:";
	cin >> x;
	for (i = 0; i < n; i++) 
	{
    
    
		if (x < a[i])              //找插入位置
			break;
	}
	k = i;                         //记录插入位置
	for (i = n-1; i >=k; i--)      //将插入位置后的数据全部依次往后挪一步
	{
    
    
		a[i+1] = a[i];
	}
	a[k] = x;
	cout << "新数组:" << '\n';
	for (i = 0; i < n + 1; i++)      //输出新数组
	{
    
    
		cout << a[i] << '\t';
	}

	return 0;
}





//删除
#define  N  10
#include<iostream>
using namespace std;

int main()
{
    
    
	int a[N], i, k, x, n;
	cout << "输入数组现有元素的个数:";
	cin >> n;
	cout << "请输入数组:" << '\n';
	for (i = 0; i < n; i++)
	{
    
    
		cin >> a[i];
	}
	cout << "输入待删除的数据:";
	cin >> x;
	for (i = 0; i < n; i++) 
	{
    
    
		if (x == a[i])              //找删除位置
			break;
	}
	k = i;                         //记录删除位置
	if (i == n)
	{
    
    
		cout << "未找到删除位置!" << '\n';
	}
	else
	{
    
    
		for (i = k; i < n - 1; i++)      //将删除位置后的数据全部依次往前挪一步
		{
    
    
			a[i] = a[i + 1];
		}
		cout << "新数组:" << '\n';
		for (i = 0; i < n - 1; i++)      //输出新数组
		{
    
    
			cout << a[i] << '\t';
		}
	}
	return 0;
}

二分法查找(有序数组)

#define  N  10
#include<iostream>
using namespace std;

int main()
{
    
    
	int a[N], i, n,x;
	cout << "输入数组现有元素的个数:";
	cin >> n;
	cout << "请输入数组:" << '\n';
	for (i = 0; i < n; i++)
	{
    
    
		cin >> a[i];
	}
	cout << "输入查找元素:";
	cin >> x;
	int low = 0, high = n - 1, mid;
	while (low <= high)
	{
    
    
		mid = (low + high) / 2;
		if (x == a[mid])              //找到退出查找
		{
    
    
			break;
		}
		else if (x > a[mid])          //继续查找后半区
		{
    
    
			low = mid + 1;
		}
		else                          //继续查找前半区
			high = mid - 1;
	}
	if (low > high)
	{
    
    
		cout << "未找到查找元素!" << endl;
	}
	else
		cout << "查找元素下标:" << mid << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_47949604/article/details/113405154