本文对于排序算法中的直接插入排序、希尔排序、冒泡排序、快速排序和简单选择排序给予C语言程序实现,每一种算法均使用数组array进行测试。
#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]);
}
#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]);
}
#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]);
}
#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;
}
#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]);
}