排序算法实例(冒泡法排序、选择法排序、直接插入排序 、希尔法排序、折半插入排序)

<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;">//*********************</span></span>
<span style="font-size:18px;">//冒泡法排序 
#include<stdio.h>
#define N 10
int main()
{
	int a[N],i,j,temp;
	
	for(i=0;i<N;i++)
	{
		printf("a[%d]=",i);
		scanf("%d",&a[i]);
	}	
	
	for(i=0;i<N;i++)	//冒泡排序 
	{
		for(j=0;j<N-i-1;j++)
		{
			if(a[j]>a[j+1])
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
	
	printf("排序后:\n");
	for(i=0;i<N;i++)
	{
		printf("%d  ",a[i]);
	}
	return 0;
} 


//***********************************
//冒泡法排序 
#include<stdio.h>
#define N 10
int main()
{
	int a[N],i,j,temp;
	
	for(i=0;i<N;i++)
	{
		printf("a[%d]=",i);
		scanf("%d",&a[i]);
	}	
	
	for(i=N;i>0;i--)		//冒泡排序 
	{
		for(j=0;j<N;j++)
		{
			if(a[j]>a[j+1])
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
	
	printf("排序后:\n");
	for(i=0;i<N;i++)
	{
		printf("%d  ",a[i]);
	}
	return 0;
} 


//*************************
//选择法排序 
#include<stdio.h>
#define N 10
int main()
{
	int a[N],i,j,temp;
	
	for(i=0;i<N;i++)
	{
		printf("a[%d]=",i);
		scanf("%d",&a[i]);
	}
	
	for(i=0;i<N-1;i++)		//选择法排序 
	{
		for(j=i+1;j<N;j++)
		{
			if(a[i]>a[j])
			{
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}
	
	for(i=0;i<N;i++)
	{
		printf("%d  ",a[i]);
	}
	return 0;
} 


//*******************
//直接插入排序 
#include<stdio.h>
#define N 6
int main()
{
	int a[N],i,j,temp;
	for(i=0;i<N;i++)
	{
		printf("a[%d]=",i);
		scanf("%d",&a[i]);
	}
	
	for(i=1;i<N;i++)
	{
		if(a[i]<a[i-1])
		{
			temp=a[i];
			for(j=i-1;j>=0&&temp<a[j];j--)
			{
				a[j+1]=a[j];
			}
			a[j+1]=temp;
		}
	}
	
	for(i=0;i<N;i++)
	{
		printf("%d  ",a[i]);
	}
	return 0;
} 


//******************************
//直接插入排序 
#include<stdio.h>
#define N 6
int main()
{
	int a[N],i,j;
	
	for(i=1;i<N;i++)
	{
		printf("a[%d]=",i);
		scanf("%d",&a[i]);
	}
	
	for(i=2;i<N;i++)
	{
		if(a[i]<a[i-1])
		{
			a[0]=a[i];
			for(j=i-1;a[j]>a[0];j--)
			{
				a[j+1]=a[j];
			}
			a[j+1]=a[0];
		}
	}
	
	for(i=1;i<N;i++)
	{
		printf("%d  ",a[i]);
	}
	return 0;
}
//**********************
//直接插入排序 
#include<stdio.h>
#define N 6
int main()
{
	int a[N],i,j;
	
	for(i=1;i<N;i++)
	{
		printf("a[%d]=",i);
		scanf("%d",&a[i]);
	}
	
	for(i=2;i<N;i++)
	{
		if(a[i]<a[i-1])
		{
			a[0]=a[i];
			a[i]=a[i-1];
			for(j=i-2;a[j]>a[0];j--)
			{
				a[j+1]=a[j];
			}
			a[j+1]=a[0];
		}
	}
	
	for(i=1;i<N;i++)
	{
		printf("%d  ",a[i]);
	}
	return 0;
}
//*******************
//希尔法排序
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define N 30
int main()
{
	int a[N],i,j,dk;
	srand( time(NULL) );
	
	for(i=0;i<N;i++)
	{
		a[i+1]=1+rand()%20;
	}
	
	printf("Before Sort:\n");
	for(i=1;i<N;i++)
	{
		printf("a[%d]=%d\n",i,a[i]);
	}
	
	//希尔法排序
	for(dk=(N-1)/2;dk>=1;dk=dk/2)
	{
		for(i=dk+1;i<N;i++)
		{
			if(a[i]<a[i-dk])
			{
				a[0]=a[i];
				for(j=i-dk;j>0&&a[0]<a[j];j-=dk)
				{
					a[j+dk]=a[j];
				}
				a[j+dk]=a[0];
			}
 		
 		}
	} 
	
	printf("After Sort:\n");
	for(i=1;i<N;i++)
	{
		printf("%d  ",a[i]);
	}
	printf("\n");
	
	return 0;
}  
//**************************
//折半插入排序
#include<stdio.h>
#define N 6
int main()
{
	int a[N],i,j,low,high,mid;
	
	for(i=1;i<N;i++)		//a[0]为哨兵位 
	{
		printf("a[%d]=",i);
		scanf("%d",&a[i]);
	}
	
	for(i=2;i<N;i++)
	{
		a[0]=a[i];	
		low=1;
		high=i-1;
		while(low<=high)
		{
			mid=(low+high)/2;
			if(a[0]<a[mid]) 
			{
				high=mid-1;
			}
			else
			{
				low=mid+1;
			}
		}  
		for(j=i-1;j>=high+1;j--)
		{
			a[j+1]=a[j];
		}
		a[high+1]=a[0];
	}
	
	for(i=1;i<N;i++)
	{
		printf("%d  ",a[i]);
	}
	
	return 0;
} 
</span>

这里只举实例,算法就不写出来了,有空的时候会补充上。

你可能感兴趣的:(直接插入排序,冒泡法排序,选择法排序,排序算法实例,希尔法排序)