【1】這是冒泡法的程序:
#include<stdio.h>
void sort(int array[],int size)
{
int i,j,temp,nowswap;
/*下面是利用相鄰的比較,把大的數放到上面;*/
for(i=0;i<size-1;i++)
{
noswap=TRUE;
for(j=i+1;j<size;j++)
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
noswap=FALSE;
}
if(noswap) break;
}
}
void main()
{
int i;
int a[10]={1,33,78,34,787,213,132,35,32,21};
sort(a,10);
for(i=0;i<10;i++)
printf("%6d",a[i]);
}
【2】這是選擇法的程序:
#include<stdio.h>
void sort(int array[],int size)
{
int i,j,k,temp;
for(i=0;i<size-1;i++)
{
k=i;
/*把最小的那一個數找出來,並且用a[k]記下來,然後與a[i]交換;*/
for(j=i+1;j<size;j++)
if(array[k]>array[j])
k=j;
temp=array[k];
array[k]=array[i];
array[i]=temp;
}
}
void main()
{
int a[]={12,43,54,23,32,65,87,2,34,54};
int i;
sort(a,10);
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
【3】這是一個快速排序的程序:
#include<stdio.h>
void quick_sort(int array[],int first,int last)//first,last分別為數組上下標的范圍;
{
int temp,low,high,list_separator;
low=first;
high=last;
/*下面是比較數組中的大小,把數組中的數與中間數比較,大的放在後半部分,比中間數小的放在前半部分,*/
list_separator=array[(first+last)/2];//中間數;
do{
while(array[low]<list_separator)//中間數與前半部分比較;
low++;
while(array[high]>list_separator)// 中間數與後半部分比較;
high--;
if(low<=high)//前半部分與後半部分交換;
{
temp=array[low];
array[low++]=array[high];
array[high--]=temp;
}
}while(low<=high);
if(first<high)
quick_sort(array,first,high);//利用遞歸的辦法,實行循環;
if(low<last)
quick_sort(array,low,last);//利用遞歸的辦法,實行循環;
}
void main()
{
int a[9]={12,23,34,65,93,32,21,9,8};
quick_sort(a,0,8);
for(int i=0;i<9;i++)
printf("%d ",a[i]);
printf(" ");
}
這是一個希爾排序的程序:
#include<stdio.h>
void shell_sort(int array[],int size)
{
int temp,gap,i,flag;
gap=size/2;
do{
do{
flag=0;/*利用標記,使前半部分與後半部分的數都對應比較過,前半部分大於後半部分的交換,直到都比較過,並且前半部分的數小於與前部分一一對應的後部分的數時,退出while循環*/
for(i=0;i<size-gap;i++)
if(array[i]>array[i+gap])
{
temp=array[i];
array[i]=array[i+gap];
array[i+gap]=temp;
flag=1;
}
}while(flag);
}while(gap=gap/2);
}
void main()
{
int array[]={1,2,32,43,64,7654,321,42,23,97,56,32,78,45,32},i;
shell_sort(array,15);
for(i=0;i<15;i++)
printf("%10d",array[i]);
}