排序算法学习


排序算法

学习自六大排序算法

冒泡排序

//冒泡排序
void MPswap(int* arr,int n)
{
	int end=n;
	while(end)//最好的情况处理N次,最差的情况N*N次 
	{	
	int flag =0;
	for(int i=1;iarr[i])//前一项比当前项大,交换位置 
		{
			int temp=arr[i];
			arr[i]=arr[i-1];
			arr[i-1]=temp;
			flag=1;
		}
	}
	if(flag == 0)//当所有元素排列完毕 不再有大在前的情况flag为0则跳出while循环 
	{
		break;
	}	
	}
}

插入排序

//插入排序 多少有点难理解,老老实实看原文讲解 
//必须理解了怎么排的序 
void CRswap(int* arr,int n)
{
	for(int i=0;i=0)
		{
			if(temp

希尔排序

大佬确实厉害,下面的写法兼顾了gap≠1时的置换和gap=1时候的插入排序

 //希尔排序 注意和插入排序的联系
 void ShellSort(int* arr,int n)
 {
 	int gap=n;
 	while(gap<1)//gap>1使最后一次循环gap最大仅能为1
	 {
	 	gap=gap/2;//gap每次对半
		 for(int i=0;i=0) 
			 {
			 	if(temp

选择排序

 	//选择排序  一次寻找最大值和最小值可以增加一倍效率 
	 void swap(int*x,int*y)
	 {
	 	int temp=*x;
	 	*x=*y;
	 	*y=temp;
	 }
	 
	 
	 void SelectSort(int* arr,int n);
	 {
	 	int begin = 0;int end=n-1;//记录起始位置与结尾位置
		 while(beginarr[max])
		 	max=i;//若碰到比最大值/最小值大/小的,则替换编号
			  
		  } 
		  swap(&arr[begin],&arr[min]);//最小值放最前
		  if(begin == max)max=min;//防止最大的数在begin位置被换走  
		  swap(&arr[end],&arr[max]);//最大值放最后
		  begin++;
		  end--;
		   
	  }