// FindAndSort.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
void pri(int data[], int len)
{
int i;
for (i = 0; i < len; i++)
{
printf("%d", data[i]);
printf(",");
}
}
//简单插入排序:算法原理是先排第一个元素,第一个元素有序,再排第一个和第二个元素,使他们有序,再排第一个、第二个、第三个元素,使他们有序,以此类推,平均时间复杂度O(n^2),空间复杂度O(1),稳定
void InsertSort(int data1[], int len)
{
printf("简单插入排序:");
printf("\n");
int i, j, temp, minIndex;
for (i = 1; i < len; i++)
{
for (j = 0; j < i; j++)
{
if (data1[j] > data1[i])
{
temp = data1[j];
data1[j] = data1[i];
data1[i] = temp;
pri(data1, 10);
printf("\n");
}
}
}
}
//冒泡排序:算法原理是逐两个相比较,大的元素放在后面,以此类推,是数组有序,平均时间复杂度O(n^2),空间复杂度O(1),稳定
void BubbleSort(int data2[], int len)
{
printf("冒泡排序:");
printf("\n");
int i, j, temp;
int k;
for (i = 0; i < len; i++)
{
for (j = 0; j < len - i - 1; j++)
{
if (data2[j] > data2[j + 1])
{
temp = data2[j];
data2[j] = data2[j+1];
data2[j+1] = temp;
pri(data2, 10);
printf("\n");
}
}
}
}
//简单选择排序:算法原理是选个最小的元素放在第一个,再从剩下的数组中选取最小的放在第二个,以此类推,平均时间复杂度O(n^2),空间复杂度O(1),不稳定
void SelectSort(int data3[], int len)
{
printf("选择排序:");
printf("\n");
int i, j;
int temp, minIndex;
/*for (i = 0; i < len; i++)
{
for (j = i + 1; j < len; j++)
{
if (data3[i] > data3[j])
{
temp = data3[i];
data3[i] = data3[j ];
data3[j] = temp;
pri(data3, 10);
printf("\n");
}
}
}*/
for (i = 0; i < len - 1; i++)
{
minIndex = i;
for (j = i + 1; j < len; j++)
{
if (data3[j] < data3[minIndex])
{
minIndex = j;
}
}
temp = data3[i];
data3[i] = data3[minIndex];
data3[minIndex] = temp;
pri(data3, 10);
printf("\n");
}
}
//简单顺序查找
void SequentialSearch(int data4[], int len)
{
printf("简单顺序查找:");
printf("\n");
int i, j;
int num_52=0, num_36=0;
for (i = 0; i < 10; i++)
{
if (data4[i] == 52)
{
num_52 = i + 1;
break;
}
}
for (i = 0; i < 10; i++)
{
if (data4[i] == 36)
{
num_36 = i + 1;
break;
}
num_36 = -1;
}
printf("数字52位置为:%d", num_52);
printf("\n");
printf("数字36位置为:%d", num_36);
printf("\n");
}
//二分查找
void BinarySearch(int data1[], int len)
{
printf("二分查找:");
printf("\n");
int num_22,key=22;
int low=0,high=10,middle;
while (low < high)
{
middle = (low + high) / 2;
if (key < data1[middle])
high = middle - 1;
if (key > data1[middle])
low = middle + 1;
else
num_22 = middle;
}
printf("数字22位置为:%d", num_22);
printf("\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
int data1[10] = { 51, 38, 79, 22, 91, 105, 33, 52, 16, 112 };
int data2[10] = { 51, 38, 79, 22, 91, 105, 33, 52, 16, 112 };
int data3[10] = { 51, 38, 79, 22, 91, 105, 33, 52, 16, 112 };
int len = 10;
InsertSort(data1, 10);
BubbleSort(data2, 10);
SelectSort(data3, 10);
SequentialSearch(data1, 10);
BinarySearch(data1, 10);
return 0;
}
简单插入排序、冒泡排序、简单选择排序、二分查找、顺序查找
最新推荐文章于 2022-01-03 21:08:21 发布