简单插入排序、冒泡排序、简单选择排序、二分查找、顺序查找

// 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值