栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

左程云视频算法笔记03 选择排序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

左程云视频算法笔记03 选择排序

题目二
选择排序
比如一个数组有10个数字,它们的下标 是 0 到 10-1,在3下标位置处有个数字为2,它与0下标位置处的数字对比,如果小于,则放到0下标位置处,然后减减,接着在4下标位置处有个数字5,它与1下标位置处对比,如果小于,调换位置,在减减

#include 
using namespace std;
void Swap(int arr[], int i, int j)
{
	int temp = arr[j];
	 arr[j] = arr[i];
	 arr[i] = temp;
}

void printarr(int arr[],int x)
{

	for (int i = 0; i < x; ++i)
	{
		cout << arr[i] <<" ";
	}
	cout << endl;
}


void selectSort(int arr[],int x)
{
	int N = x;

	for (int i = 0; i != N; ++i)
	{
		int minValueIndex = i;
		for (int j = i + 1; j< N; ++j)
		{
			minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
		}
		Swap(arr, i, minValueIndex);
	}
}

void test01()
{
	int ar[] = { 1,6,3,33,5,66,2,3,4,6,8 };
	int i = sizeof(ar) / sizeof(ar[0]);
	printarr(ar,i);
	selectSort(ar,i);
	printarr(ar,i);

}
int main()
{
	test01();
}

冒泡排序

#include 
using namespace std;
void Swap(int arr[], int i, int j)
{
	int temp = arr[j];
	 arr[j] = arr[i];
	 arr[i] = temp;
}

void printarr(int arr[],int x)
{

	for (int i = 0; i < x; ++i)
	{
		cout << arr[i] <<" ";
	}
	cout << endl;
}

void bubbleeSort(int arr[], int x)
{
	int N = x;
	if (arr == NULL)
	{
		return;
	}

	for (int end = N - 1; end >= 0; end--)
	{
	//0~n-1
	//0~n-2
	//0~n-3
		for (int second = 1; second <= end; ++second)
		{
			if (arr[second - 1] > arr[second])
			{
				Swap(arr,second-1,second);
			}
		}
	}
}

void test01()
{
	int ar[] = { 1,6,3,33,5,66,2,3,4,6,8 };
	int i = sizeof(ar) / sizeof(ar[0]);
	printarr(ar,i);
	//selectSort(ar,i);
	bubbleeSort(ar,i);
	printarr(ar,i);

}

插入排序

void insertSort(int arr[], int x)
{
	int N = x;
	if (arr == NULL)
	{
		return;
	}

	for (int end = 1; end < N; ++end)
	{
		int newNumINdex = end;
		while (newNumINdex - 1 >= 0 && arr[newNumINdex - 1] > arr[newNumINdex])
		{
			Swap(arr, newNumINdex - 1, newNumINdex);
			newNumINdex--;
		}
	}
}

void insertSort2(int arr[], int x)
{
	int N = x;
	if (arr == NULL)
	{
		return;
	}

	for (int end = 1; end < N; ++end)
	{
		// 比如你end现在在 5号位置, pre在5-1位置
		//判断条件是pre下标没有越界并且,pre当前的位置的数字大于pre+1的位置,则交换位置
		//pre--之后,就是4号位置,判断条件是pre下标没有越界并且,pre当前的位置的数字大于pre+1的位置,则交换位置
		for (int pre = end-1; pre >= 0 && arr[pre] > arr[pre + 1]; pre--)
		{
			Swap(arr, pre, pre - 1);
	   }
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928299.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号