排序算法总结及实现(C语言版)

 

 

#include <iostream>
#include <stack>
using namespace std;

void swap(int &a, int &b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}

/*
1、选择排序
基本思想:首先,选出最小的数放在第一位,然后选择第二小的数,放在第二位;以此类推,直到所有的数从小到大排列.
那么,对于大小为N的数组需要N-1轮选择过程。第i轮选取第i小的数,请将其放在第i个位置上。
不稳定 
平均时间复杂度O(N^2)
最好情况O(N^2)
最坏情况O(N^2)
空间复杂度O(1)
*/

void select_sort(int a[], int n)
{
	for(int i = 0; i < n-1; i++){//进行n-1轮选择,也就是i的取值为【0,n-2】
		int min_index = i;
		//记录第i小的数所在的索引
		for(int j = i + 1; j < n; j++){
			if(a[j] < a[min_index])
				min_index = j;
		}
		if(i != min_index){//根据记录的第i小的数的索引,找到了第i小的数。然后将该数放到其正确位置。也就是第i个位置。
			swap(a[i] , a[min_index]);
		}
	}

}

/*
2、冒泡排序
基本思想: 不断比较相邻的两个数,让较大的数不断地往后移。经过一番比较,就选出了最大的数。经过第二轮比较,就选出了次大的数。以此类推。
那么对于大小为N的数组,需要N-1轮比较。
平均时间复杂度O(N^2)
最好情况O(N)
最坏情况O(N^2)
空间复杂度O(1)
*/
void bubble_sort(int a[],int n)
{
	//要进行N-1轮比较
	bool is_sorted = true;
	for(int i = 0; i < n-1; i++ )//[0,n-2]恰好n-1轮比较
	{
   
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值