五种排序算法的C语言程序实现

五种排序算法的C语言程序实现

  • 排序算法
    • 一、插入排序
      • 1、直接插入排序
      • 2、希尔排序
    • 二、交换排序
      • 1、冒泡排序
      • 2、快速排序
    • 三、选择排序
      • 1、简单选择排序

排序算法

本文对于排序算法中的直接插入排序、希尔排序、冒泡排序、快速排序和简单选择排序给予C语言程序实现,每一种算法均使用数组array进行测试。

一、插入排序

1、直接插入排序

#include <stdio.h>//直接插入排序	O(n(2))
int main()
{
     	int array[]={
     49,38,65,97,76,99,32,34,21};
	int n=sizeof(array)/sizeof(int); 
	int i,j;
	int temp;
	for(i=1;i<n;i++)
	{
     	if(array[i-1]>array[i])
		{
     	temp=array[i];
			j=i-1;
			do
			{
     	array[j+1]=array[j];
				j--;
			}while(j>=0&&array[j]>temp);
			array[j+1]=temp;
		}
	}
	for(i=0;i<n;i++)
		printf("%d ",array[i]);
} 

2、希尔排序

#include <stdio.h>//希尔排序	O(n(1.3))
int main() 
{
     	int array[]={
     49,38,65,97,76,99,32,34,21};
	int n=sizeof(array)/sizeof(int); 
	int i,j;
	int temp,d=n/2;
	while(d>0)
	{
     	for(i=d;i<n;i++)
		{
     	temp=array[i];
			j=i-d;
			while(j>=0&&array[j]>temp)
			{
     	array[j+d]=array[j];
				j=j-d;
			}
			array[j+d]=temp;
		}
		d=d/2;
	}
	for(i=0;i<n;i++)
		printf("%d ",array[i]);
}  

二、交换排序

1、冒泡排序

#include<stdio.h>	//冒泡排序 O(n(2))
int main(){
     
	int array[]={
     49,38,65,97,76,99,32,34,21},i,j,temp,swap=1;
	int n=sizeof(array)/sizeof(int); 
	while(swap!=0){
     
		swap=0;
		for(j=0;j<n-1;j++)
			if(array[j]>array[j+1]){
     
				temp=array[j];
				array[j]=array[j+1];
				array[j+1]=temp;
				swap=1;
			} 
	}
	for(i=0;i<n;i++)
		printf("%d ",array[i]);
} 

2、快速排序

#include <stdio.h> //快速排序	O(nlog2n)
#include <stdlib.h>
int Partition(int *array,int low,int high)
{
     	int pivotkey=array[low];
	while(low<high)
	{
     	while(low<high && array[high]>=pivotkey)
			--high;
		array[low]=array[high];
		while(low<high && array[low]<pivotkey)
			++low;
		array[high]=array[low];
	} 
	array[low]=pivotkey;
	return low;
}
void QSort(int *array,int low,int high)
{
     	if(low<high)
	{
     	int pivotloc=Partition(array,low,high);
		QSort(array,low,pivotloc-1);
		QSort(array,pivotloc+1,high);
	}
}
void Print(int *array,int size)
{
     	for(int i=0;i<size;i++)
		printf("%d ",array[i]);
	return;
}
int main()
{
     	int array[]={
     49,38,65,97,76,99,32,34,21};
	int size=sizeof(array)/sizeof(int);
	QSort(array,0,size-1);
	Print(array,size);
	return 0;
}

三、选择排序

1、简单选择排序

#include<stdio.h>  //简单选择排序 O(n(2))
int main(){
     
	int array[]={
     49,38,65,97,76,99,32,34,21},i,j,min,temp;
	int n=sizeof(array)/sizeof(int); 
	for(i=0;i<n-1;i++){
     
		min=i;
		for(j=i+1;j<10;j++)
			if(array[j]<array[min])min=j;
		if(min!=i){
     
			temp=array[i];
			array[i]=array[min];
			array[min]=temp;
		}
	}
	for(i=0;i<n;i++)
		printf("%d ",array[i]);
} 

你可能感兴趣的:(排序算法,算法,c语言,快速排序,插入排序)