大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.
近期会把自己本科阶段的一些课程设计、实验报告等分享出来,供大家参考,希望对大家有帮助。
博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html
(1)输入一个数组,将数组元素用快速排序输出
(2)输入一个目标数据,从已知链表中用折半查找查出目标数据的位置
1) 数据输入(输入哪些数据、个数、类型、来源、输入方式)
输入n个需要排序的数据(int 整型)
输入待查找的目标数据key(int 整型)
2) 数据存储(输入数据在内存中的存储)
n个数据都存储在数组Array[i]中
以链表的形式存储数据,采用动态分配内存并释放
3) 数据处理(说明处理步骤。若不是非常简单,需要绘制流程图)
(1)
①先从数列中取出一个数为准基数
②分区过程,将比这个数大的数全部放在他的右边,小于或等于它的数全部放在左边
③再对左右区间重复第二步,直到各区间只有一个数
(2)
①将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
②否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表;
③重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
4) 数据输出
#include<iostream>
using namespace std;
void QuickSort(int Array[], int left, int right);
int main()
{
int array[] = { 3, 21, 87, 1, 21, 10 };
cout << "排序前数列为:";
for (int i = 0; i < 6; i++)
{
cout<< array[i]<<" ";
}
cout << endl;
QuickSort(array, 0, 5);
cout << "快速排序后为:";
for (int i = 0; i < 6; i++)
{
cout << array[i]<<" ";
}
cout << endl;
system("pause");
return 0;
}
void QuickSort(int Array[], int left, int right)
{
if (left >= right)
{
return;
}
int first = Array[left];
int leftIndex = left, rightIndex = right;
while (leftIndex < rightIndex)
{
while (leftIndex < rightIndex)
{
if (first <= Array[rightIndex])
{
rightIndex--;
}
else
{
Array[leftIndex] = Array[rightIndex];
leftIndex++;
break;
}
}
while (leftIndex < rightIndex)
{
if (first >= Array[leftIndex])
{
leftIndex++;
}
else
{
Array[rightIndex] = Array[leftIndex];
rightIndex--;
break;
}
}
}
Array[leftIndex] = first;
QuickSort(Array, left, leftIndex - 1);
QuickSort(Array, rightIndex + 1, right);
}
#include<iostream>
using namespace std;
// 线性表中的元素
typedef int KeyType;
typedef struct ElemType {
KeyType key; // 主关键字
// 省略其他数据,不再定义
}ElemType;
// 线性表的顺序存储结构
typedef struct SeqTable {
ElemType* elem; // 数据元素存储空间基址,建表时按实际长度分配,
// 0 号单元留空,从 1 号单元开始使用。
int length; // 表长度
}SeqTable;
//
// 在此处声明函数
//
int BinarySearch(SeqTable* pST, KeyType key);
void InitSeqTable(SeqTable* pST);
void DeleteSeqTable(SeqTable* pST);
int main()
{
KeyType n,m;
SeqTable ST; // 线性表
//
// 初始化线性表
//
InitSeqTable(&ST);
cout << "初始线性表为:";
for (int i = 1; i <= ST.length; i++)
{
cout << ST.elem[i].key << " ";
}
cout << endl;
cout << "输入要查找的元素:";
cin >> n;
//
// 折半查找
//
m=BinarySearch(&ST, n);
cout << n << "位于链表的第" << m << "位" << endl;
//
// 销毁线性表
//
DeleteSeqTable(&ST);
system("pause");
return 0;
}
/*
功能:
折半查找。
参数:
pST -- 线性表指针
key -- 查找关键字
返回值:
如果查找成功返回关键字在表中的位置
如果查找失败返回 0
*/
int BinarySearch(SeqTable* pST, KeyType key)
{
int low = 1;
int high = pST->length;
int mid;
while (low < high)
{
mid = (low + high) / 2;
if (pST->elem[mid].key == key)
{
return mid;
break;
}
else if (pST->elem[mid].key>key)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
}
/*
功能:
初始化线性表。
参数:
pST -- 线性表指针
*/
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
int InitArray[] = { 2, 4, 11, 18, 25, 32, 39, 46, 53, 60, 67, 74 }; // 顺序必须为从小到大
void InitSeqTable(SeqTable* pST)
{
int i;
pST->length = sizeof(InitArray) / sizeof(InitArray[0]);
pST->elem = (ElemType*)malloc((pST->length + 1) * sizeof(ElemType)); // 因为单元 0 留空,所以长度必须加 1
for (i = 1; i <= pST->length; i++)
pST->elem[i].key = InitArray[i - 1];
}
/*
功能:
销毁线性表。
参数:
pST -- 线性表指针
*/
void DeleteSeqTable(SeqTable* pST)
{
free(pST->elem);
pST->elem = NULL;
pST->length = 0;
}
博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43598687/article/details/123787325
内容来源于网络,如有侵权,请联系作者删除!