6个常见排序

发布于 2017-11-30  1.41k 次阅读


6个常见排序

代码

#include 
void Bubblesort1(int a[],int n) // 冒泡排序1 
{
	int i,j,temp;
	for(i=0;i a[j]) // 交换数组中的两个数
			{
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
	return;
}
void  Bubblesort2(int a[],int n) // 冒泡排序2(沉底法)与冒泡1差不多
{
	int i,j,temp;
	for(i=0;i a[j+1])
			{
				temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}	
	return;
} 
void Insert(int a[],int n)//插入排序 
{
	int i,j,temp;
	for(i=1;i=0 && temp < a[j]) // 将抓到的牌与手牌从右向左进行比较
		{
			a[j+1] = a[j]; // 如果该手牌比抓到的牌大,就将其右移
			j--;
		}
		a[j+1] = temp;  // 直到该手牌比抓到的牌小(或二者相等),将抓到的牌插入到该手牌右边(相等元素的相对次序未变,所以插入排序是稳定的)
	}
}
void chiose(int a[],int n) // 选择排序 
{
	int min,temp,i,j;
	for(i=0;i a[j]) // 找出未排序序列中最小的
				min = j;
		if(i != min) // 把未排序序列中最小的放到已排序序列的末尾
		{
			temp = a[i];
			a[i] = a[min];
			a[min] = temp;
		}
	}
	return;
}
void TwoInsertSort(int a[],int n) // 二分排序
{
	int left,right,mid;
	int i,j,num;
	for(i=0;i= left) // 二分查找的插入位置
		{
			mid = (left + right) / 2; // 指向已经排好序的中间位置 
			if(num < a[mid]) // 要插入的元素在左区间
				right = mid - 1;
			else // 要插入的元素在左区间
				left = mid + 1; 
		} 
		for(j=i-1;j>=left;j--) 
			a[j+1] = a[j];
		a[left] = num; // 插入元素 
	}
}
void shell(int a[],int n) // 希尔排序(不会。。。)
{
	int i,j,k,x;
	k = n / 2;
	while(k >= 1)
	{
		for(i=k;i= 0 && x < a[j])
			{
				a[j+k] = a[j];
				j -= k;
			}
			a[j+k] = x;
		}
		k /= 2;
	}	
	return;	
} 
void Print(int a[],int n) // 输出排序好的数组
{
	int i;
	for(i=0;i