C++基础的排序算法

冒泡排序

  1. 现在输入 10 个用户的有效学习时间,要求对它们按由小到大的顺序排序。

解题思路:这种问题是一个典型的排序问题,排序方法是一种重要且基本的算法,我们在此使用“冒泡排序法”,其思路为:每次将相邻两个数比较,将小的调到前面,如果有 6 个数:8,7,5,4,2,0。第一次先将最前面的两个数 8 和 7 对调(看下图)。第二次将第二个数和第三个数(8 和 5)对调。如此总计进行了 5 次,得到 7-5-4-2-0-8 的顺序,可以看到:最大的数 8 已经沉底,成为最下面的一个数,而小的数上升。经过第一轮(5 次比较)后,得到了最大的数 8。


冒泡排序图解:
简单总结:

如果有 n 个数,则需要比较 n-1 轮,在第一轮需要进行 n-1 次两两比较,在第 j 轮中要进行 n-j 次的两两比较。

这种如水底的气泡逐步冒出水面一样,故称之为冒泡法。

例题:


#include <iostream>
using namespace std;
void swap(int &a, int  &b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}
int main() {

	int arr[6] = { 0 };

	int len = sizeof(arr) / sizeof(int);

	for (int i = 0; i < len; i++) {
		cin >> arr[i];
	}


	// write your code here......
	for (int i = 0; i < len-1; i++)
	{
		for (int j = 0; j < len-i-1; j++)
		{
			if (arr[j]>arr[j+1])
			{	
				swap(arr[j], arr[j+1]);
			}
		}
		
	}
	for (int i = 0; i < len; i++)
	{	
		cout << arr[i] << " ";

	}
	
		
	return 0;
}

核心代码:

for (int i = 0; i < len-1; i++)

    {

        for (int j = 0; j < len-i-1; j++)

        {

            if (arr[j]>arr[j+1])

            {    

                swap(arr[j], arr[j+1]);

            }

        }

        

    }


for 循环的书写方法  左开右闭  几个数就是几

//for (int q = 0; q < 10; q++)  //十个数 第二个Q后面是10


C语言有现成的快速排序算法

使用的是头文件   stdlib.h

用法:

void qsort(void* base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));


选择排序

选择排序思路,假定一个最小或最大值,根据题意这里假定一个最小值等于arr[0]
调用i后的数组元素的值和假定最小值比较,比最小值还小,互相交换
一轮循环比对过后把最小值赋值给当前i对应的元素,(比如,当前i==0,那么arr[0]=min,如果当前i==1,那么arr[1]=min,这个min就是第二小的值,以此类推得到一个从小到大排序的数组
i的值++,重复进行比较,重写交换和赋值,直到完成
例题:
#include <iostream>
using namespace std;
void swap(int &a, int  &b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}
int main() {

	int arr[6] = { 0 };

	int len = sizeof(arr) / sizeof(int);

	for (int i = 0; i < len; i++) {
		cin >> arr[i];
	}


	// write your code here......
	for (int i = 0; i < len; i++)
	{	
		int min = arr[i];
		for (int j = i+1; j < len; j++)
		{	
			if (min>arr[j])
			{
				swap(min, arr[j]);
			}
		}
		arr[i] = min;
	}
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << " ";

	}


	return 0;
}
posted @ 2022-03-30 17:33  快乐气氛组阿宇  阅读(55)  评论(0编辑  收藏  举报