数组算法
选择法排序
#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;
}
版权声明:本文为qq_47949604原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。