排序算法--选择+冒泡及其改进

void Bubble(int a[],int n)
{
	int i,j;
	for (i=0;i<=n-2;i++){
		for (j=0;j<=n-2-i;j++){
			if (a[j+1]<a[j]){
				swap(a[j+1],a[j]);
			}
		}
	}

	for (i=0;i<=n-1;i++){
		printf("%3d",a[i]);
	}
	printf("\n");
}




#include "stdio.h"
#include "stdlib.h"


void swap(int *a,int *b)
{
	int temp;
	temp=*a;
	*a=*b;
	*b=temp;
}

void SelectSort(int a[],int n)
{
	int i,j,min;
	for (i=0;i<n;i++){
		min=i;
		for (j=i+1;j<=n-1;j++){
			if (a[min]>a[j])
				min=j;
		}
		if (min!=i)
			swap(&a[min],&a[i]);
	}
}

void BubbleSort1(int a[],int n)
{
	//两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
	int i,j;
	for (i=0;i<n;i++){
		for (j=i+1;j<=n-1;j++){
			if (a[i]>a[j])
				swap(&a[i],&a[j]);
		}
	}
}

void BubbleSort2(int a[],int n)
{
	//冒泡算法的进一步优化,使用一个标志位来记录是
	//否有数据的交换,如果数据有交换,则将标志flag赋值为true
	int i,j;
	for (i=0;i<n;i++){
		for (j=n-2;j>=i;j--){
			if (a[j]>a[j+1])
				swap(&a[j],&a[j+1]);
		}
	}
}


void BubbleSort3(int a[],int n)
{
	int i,j;
	int flag=1;

	for (i=0;i<n&&flag;i++){
		flag=0;
		for (j=n-2;j>=i;j--){
			if (a[j]>a[j+1]){
				swap(&a[j],&a[j+1]);
				flag=1;
			}
		}
	}
}

void Print(int a[],int n)
{
	int i;
	for (i=0;i<=n-1;i++){
		printf("%d  ",a[i]);
	}
	printf("\n\n\n");
}

int main()
{
	int a[10]={1,8,5,7,9,2,3,6,4,11};
	BubbleSort3(a,10);
	Print(a,10);
	return 0;
}


上面的程序还不如这个版本:

void Bubble(int a[],int n)
{
	int i,j;
	for (i=0;i<=n-2;i++){
		for (j=0;j<=n-2-i;j++){
			if (a[j+1]<a[j]){
				swap(a[j+1],a[j]);
			}
		}
	}

	for (i=0;i<=n-1;i++){
		printf("%3d",a[i]);
	}
	printf("\n");
}


你可能感兴趣的:(排序算法--选择+冒泡及其改进)