冒泡排序and插入排序

Hello world,hello blog!

Posted by 吴柚 on March 14, 2019

冒泡排序

1.两个相邻的比较,若果不符合顺序,交换内容,每一趟会将最大的(小的)放到最后 2个循环,第一个控制趟,第二个控制比较

#include<iostream>
using namespace std;

template<class T>
void bubbleSortUp(T *a,int n){
	for(int i=n-1;i>0;i--){     //从n-1到1(大于0)
		for(int j=0;j<i;j++){   //第二个循环从 0~i开始
			if(a[j]>a[j+1]){    //如果顺序不对,交换内容
				T temp;         //交换用临时变量
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}	
}

template<class T>
void bubbleSortDown(T *a,int n){
	for(int i=n-1;i>0;i--){
		for(int j=0;j<i;j++){
			if(a[j]<a[j+1]){    //降序
				T temp;
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
}

template<class T>
void print(const T *a,int n){
	for(int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}
}


int main(){
	double p[]={4.2,2.3,3.1,1.1,3.1,5,7,8};
	bubbleSortUp(p,sizeof(p)/sizeof(double)); //sizeof(p)/sizeof(double)取数组长度
	print(p,sizeof(p)/sizeof(double));
	float p2[]={1,3,2,2,4.4,99.2,13.84,5,6};
	cout<<endl;
	bubbleSortDown(p2,sizeof(p2)/sizeof(p2[0]));
	print(p2,sizeof(p2)/sizeof(p2[0]));
	return 0;
}

插入排序

以升序为例:

  1. 从数组第二个数开始,取数组元素。

  2. 从a[0]开始比较,直到找到它的位置,即他比后变的数小(如果没有知道结尾)

  3. 把位置后边的数向后移动

#include<iostream>
using namespace std;
template<class T>
void fun(T *p,int n){
	for(int i=1;i<n;i++){
		T temp =p[i];        //存储当前的数
		for(int j=0;j<i;j++){//从第一个开始比较(a[0]不用排列)
			if(temp<p[j]){   //找到排列的位置
				int k=i;
				while(k!=j){ //i=j时停止
					p[k]=p[k-1];//j后的元素向后移动,腾出位置
					k--;
				}
				p[j]= temp;  //填入值
				break;
			}
			
		}
	}	
}
template<class T>
void jiangxu(T *p,int n){    //指针、长度
	for(int i=1;i<n;i++){    //用于控制数 
		T temp = p[i];       //用于存放这个变量,移动时不破坏
		for(int j=0;j<i;j++){//和已经排雷好的数比较,从0开始,小于i(i前已经排列好)
			if(temp>p[j]){   //如果找见位置,则向后移冬
				int k =i;    //存储当前的i的值
				while(k!=j){ //控制向后移,知道相等
					p[k]=p[k-1];
					k--;
				}
				p[j]=temp;
				break;       //退出循环
			}
		}
	}
}

template<class T>
void output(const T *p,int n){
	for(int i=0;i<n;i++){
		cout<<p[i]<<" ";
	}
}
int main(){
	double p[]={4.2,2.3,3.1,1.1,3.1,5,7,8};
	fun(p,sizeof(p)/sizeof(double));     //sizeof(p)/sizeof(double)取数组长度
	output(p,sizeof(p)/sizeof(double));
	float p2[]={1,3,2,2,4.4,99.2,13.84,5,6};
	cout<<endl;
	jiangxu(p2,sizeof(p2)/sizeof(p2[0]));
	output(p2,sizeof(p2)/sizeof(p2[0])); //sizeof(p2)/sizeof(p2[0])取数组长度的另一种方法
	return 0;
}

操作系统和计算机网络

在学习C++的同时,也打算复习操作系统和计算机网络的相关内容;学习笔记与心得慢慢补充;