六种排序算法代码实现(c++)

六种排序算法(冒泡排序,选择排序,插入排序,希尔排序,快速排序,归并排序)的基本思想:

  1. 冒泡排序:通过对待排序序列从前往后,依次比较相邻元素的值,若比较是逆序则进行交换,使值较大的元素逐次从前向后移动,就像水底的气泡一样从下往上冒。
  2. 选择排序:第一次从数组arr[0]~arr[n-1]中找出最小数与arr[0]交换(若最小数就等于arr[0]则不需要交换),第二次从数组arr[1]~arr[n-1]中找出最小值与arr[1]交换...第i次在arr[i-1]与arr[n-1]中找出最小值与arr[i-1]交换,第n-1次在arr[n-2]~arr[n-1]中找出最小值与arr[n-1]交换,这样经历了n-1次之后,就可以得到一个有序的升序数组。
  3. 插入排序:把有n个数据的待排序的数组分成是一个只有一个元素的有序表和另一个有n-1个元素的无序表,排序过程中每次从无序表中取出第一个数据与有序表中的元素依次比较找到合适的位置插入。
  4. 希尔排序:插入排序的优化本质也是一种插入排序。希尔排序是把记录按下标的一定增量分组,对每组直接使用插入算法进行排序:随着增量逐渐减小至1时,整个文件被分为一组,排序结束。
  5. 快速排序:通过一趟排序将要排序的数组分割成两部分,其中一部分的所有数据比另一部分的所有数据都要小,然后再按次方法对这两部分数据进行快速排序,整个排序可以递归完成,以此整个数据变成有序序列。
  6. 归并排序:即将序列分成一些更小的序列进行递归排序,然后再将排序好的序列补和在一起六种排序算法代码实现(c++)_第1张图片
#include
using namespace std;

int i,j;
void bubbleSort(int arr[],int n)//冒泡排序
{
   int flag;
   int t;
   for(i=0;iarr[j+1])
		   {
			   t=arr[j];
			   arr[j]=arr[j+1];
			   arr[j+1]=t;
			   flag=1;
		   }
	   }
	   if(flag==0)
		   break;//一趟排序过后没有数据发生交换就说明数组已经有序,不用再进行排序,所以直接推出循环即可。
   }
}
void selectSort(int arr[],int k)//选择排序
{
	int min,l,t;
	for(j=0;j=0)
		{
			arr[l+1]=arr[l];
			l--;
		}
		if(l!=i-1)
		{
			arr[l+1]=x;
		}	
	}
}
void SheelSort(int arr[],int k)//希尔排序
{
	int t,l=k/2;//
	while(l>=1)
	{
	  for(i=l;i=0;j-=l)
		 {
			if(arr[j]>arr[j+l])
			{t=arr[j];arr[j]=arr[j+l];arr[j+l]=t;}
		 }
	  }
	  l/=2;
	}
}
void quickSort(int arr[],int left,int right)//快速排序
{
	int l=left;
	int r=right;
	int p=arr[(left+right)/2];//以数组的中间值作为基数
	int t;
	while(lp)//找到在p右边比p小的数退出循环
		{
			r--;
		}
		while(arr[l]left)  quickSort(arr,left,r);
	if(l

 

你可能感兴趣的:(排序算法,c++,算法)