這是冒泡法的程式:
#include
void sort(int array[],int size)
{
int i,j,temp;
/*下面是利用相鄰的比較,把大的數放到上面;*/
for(i=0;i
for(j=i+1;j
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
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]);
}
這是選擇法的程式:
#include
void sort(int array[],int size)
{
int i,j,k,temp;
for(i=0;i
{
k=i;
/*把最小的那一個數找出來,並且用a[k]記下來,然後與a[i]交換;*/
for(j=i+1;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(%dt,a[i]);
}
這是一個快速排序的程式:
#include
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]
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
quick_sort(array,first,high);//利用遞迴的辦法,實行迴圈;
if(low
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(%dt,a[i]);
printf(n);
}
這是一個希爾排序的程式:
#include
void shell_sort(int array[],int size)
{
int temp,gap,i,flag;
gap=size/2;
do{
do{
flag=0;/*利用標記,使前半部分與後半部分的數都對應比較過,前半部分大於後半部分的交換,直到都比較過,並且前半部分的數小於與前部分一一對應的後部分的數時,退出while迴圈*/
for(i=0;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]);
}