(c++)插入、选择、冒泡排序算法源码(含测试用例)

本实验用例取材于郭炜的《程序设计与算法》
在科班眼中,最牛逼的一个课程就是数据结构,掌握数据结构就是掌握程序的半边天下,就犹如worth提出的:“数据结构+算法=程序设计”本次给出插入、选择、冒泡源码是希望我们能及时掌握这些背后的真正门道,以至于强人一头!
一、选择排序

#include<iostream>
#include<cstring>
using namespace std;
void SelectionSort(int a[],int size){
	for(int i=0;i<size-1;i++){
		int temp = i;
		for(int j=i+1;j<size;j++){
			if(a[j]<a[temp])
				temp = j;
		}
		int tp = a[i];
		a[i] = a[temp];
		a[temp] = tp;
	}
}
int main()
{
	int a[5]={3,5,8,2,7};
	for(int i=0;i<5;i++)
		cout << a[i] << "," ;
	SelectionSort(a,5);
	cout << endl;
	for(int i=0;i<5;i++)
		cout << a[i] << "," ;	
	return 0;
}

总结:代码核心在于,从第一个元素开始,往后面进行比较,找到最大(最小)的进行标记,遍历一行之后进行交换,时间复杂度O(n)
二、插入排序

#include<cstring>
#include<iostream>
using namespace std;
void InsertionSort(int a[],int size)
{
	for(int i=1;i<size;i++){
		for(int j=0;j<i;j++){
			if(a[j]>a[i]){
				int temp = a[i];
				for(int k=i;k>j;--k)
					a[k]=a[k-1];
				a[j]=temp;
				break;
			}
		}
	}
}
int main(){
	int a[5]={3,5,8,2,7};
	for(int i=0;i<5;i++)
		cout << a[i] << "," ;
	InsertionSort(a,5);
	cout << endl;
	for(int i=0;i<5;i++)
		cout << a[i] << "," ;	
	return 0;
}

总结:将数组分为左右两边,左边无序,右边有序,目标将无序的数字插入到有序之中,直到无序的数组元素个数变成0,另外,有一个特殊的小技巧就是挪动元素,这也是数据结构中线性表顺序存储的插入核心算法,希望值得领会!
三、冒泡排序

#include<iostream>
using namespace std;
void BubbleSort(int a[],int size){
	for(int i=size-1;i>0;--i){
		for(int j=0;j<i;++j){
			if(a[j]>a[j+1]){
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
}
int main()
{
	int a[5]={3,5,8,2,7};
	for(int i=0;i<5;i++)
		cout << a[i] << "," ;
	BubbleSort(a,5);
	cout << endl;
	for(int i=0;i<5;i++)
		cout << a[i] << "," ;	
	return 0;
	
}

总结:冒泡排序将数组分为左右两边,每次比大小就交换,左边有序,右边无序,将数字从无序像泡泡一样吹上来,冒泡排序算法应运而生!

发布了15 篇原创文章 · 获赞 2 · 访问量 159

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/104800023