查找排序算法的C++实现在vs2013环境下实现
<pre name="code" class="cpp">折半查找算法
<pre name="code" class="cpp">带哨兵站顺序查找算法
<pre name="code" class="cpp">冒泡排序
<pre name="code" class="cpp">含有顺序查找算法、带哨兵站顺序查找、折半查找算法、冒泡排序
#include<iostream>
#include<Windows.h>
#define MAX 100
#define MaxSize 100
typedef int DataType;
typedef int KeyType;
using namespace std;
typedef struct
{
KeyType key;
}Datatype;
typedef struct
{
Datatype r[MaxSize];
int length; //表长
}Sqlist;
int InitSqlist(Sqlist &S)
{
cout << "请输入顺序表的表长即数据(整形数据)的个数:";
cin >> S.length;
for (int i = 1; i <=S.length; i++)
{
cout << "请输入第" << i << "个数据:";
cin >> S.r[i].key;
}
return 0;//顺序表创建成功
}
//顺序查找
int SeqSearch(Sqlist s, KeyType k)
{
int i;
for (i = 1; i <= s.length; i++)
{
if (s.r[i].key==k)
{
return i; //返回下坐标,查找成功
}
}
return -1;//查找失败
}
//带哨兵站顺序查找算法
int SeqSearch_guard(Sqlist S, KeyType k)
{
int i;
S.r[0].key = k; // “哨兵”
for (i = S.length; S.r[i].key != k; --i);
return i;
}
//折半查找算法
int BinSearch(Sqlist S, KeyType k)
{
int low, mid, high;
low = 0;
high = S.length;
while (low<=high)
{
mid = (low + high) / 2;
if (S.r[mid].key == k)
{
return mid;
}
else if (S.r[mid].key > k)
high = mid - 1;//左区间查找
else
low = mid + 1;//右区间查找
}
return -1;//查找失败
}
void Search(Sqlist S)
{
int key;
cout << "请问客户要查找该数据的哪个数据?";
cin >> key;
Sleep(500);
cout << "\n-----------你已进入顺序查找算法[复杂度O(n)]-----------\n";
if (SeqSearch(S, key) == -1)
cout << "未查到!!!";
else
cout << "已查到该查到该下标[下标从1计数]为:" << SeqSearch(S, key) << endl;
Sleep(500);
cout << "\n-----------你已进入带哨兵站顺序查找算法[复杂度O(n)]-----------\n";
if (SeqSearch_guard(S, key) == 0)
cout << "未查到!!!";
else
cout << "已查到该查到该下标[下标从1计数]为:" << SeqSearch(S, key) << endl;
}
int SearchBin(Sqlist S)
{
cout << "你已进入有序表的折半查找算法中:\n";
int key;
cout << "请输入你要查找的关键字(int型):";
cin >> key;
if (BinSearch(S, key) == -1)
{
cout << "查找失败!!!";
return false;
}
else
{
cout << "折半查找已查到该关键字" << key << "下标为:" << BinSearch(S, key) << endl;
return true;
}
}
//冒泡排序
void BubbleSort(DataType a[MAX], int length)
{
DataType temp;
cout << "冒泡排序前的结果:\n";
for (int i = 0; i < length; i++)
{
cout << "\t" << a[i];
if ((i + 1) % 6 == 0)
{
cout << "\n";
}
}
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
cout << "\n冒泡排序后的结果:\n";
for (int i = 0; i < length; i++)
{
cout << "\t" << a[i];
if ((i + 1) % 6 == 0)
{
cout << "\n";
}
}
cout << "\n";
}
void DisplayBubbleSort()//展示冒泡排序
{
DataType a[MAX];
int num;
cout << "\n-----------------欢迎使用冒泡排序法------------------\n";
cout << "请客户输入一组需要排序的个数num\n";
cin >> num;
cout << "请客户输入这组需要排序的数字";
for (int i = 0; i < num; i++)
{
cin >> a[i];
}
BubbleSort(a, num);
}
int main()
{
cout << "\n----------------数据结构中查找与排序算法的实现---------------\n";
cout << "含有顺序查找算法、带哨兵站顺序查找、折半查找算法、冒泡排序---------------\n";
Sqlist S; //顺序表查找
S.length = 0;
InitSqlist(S);
Search(S);//客户查找
Sqlist s; //有序表查找
s.length = 0;
cout << "\n----------------你已进入有序表的创建-----------------\n";
InitSqlist(s);
SearchBin(s); //客户查找
DisplayBubbleSort();//展示冒泡排序
system("pause");
}
<img src="https://img-blog.csdn.net/20151030113735563?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
//冒泡排序