C程序中實現排序的選擇法和起泡法
C語言中對1個數組中的10個數排序時,涉及到兩種基本方法:選擇法和起泡法。兩種方法算法不同,結構大同小異。
兩種方法的相同之處在於結構上基本相同。(均由兩層for循環控制實現)
選擇法的算法:
10個數a[0]、a[1]...a[8]、a[9]在內存中連續存放,對10個數排序需進行0~8九次循環,其中第n次循環的內容是將a[n]之後的數(a[n+1]...a[9])依次分別與a[n]比較,每當出現比a[n]小的數時即將值與a[n]互換。如此下來,當第0次循環結束時,a[0]已被10個數中最小的數替換,第1次循環結束時,a[1]已被剩餘9個數中最小的數替換...第8次循環結束時,a[8]已被最後剩餘兩個數中較小者替換,a[9]則爲10數中最大者。
起泡法的算法:
10個數a[0]、a[1]...a[8]、a[9]在內存中連續存放,對10個數排序需進行0~8九次循環,其中第n次循環的內容是將從a[0]到a[9-n]的每相鄰兩項相互比較,(即a[0]與a[1]比較a[1]與a[2]比較...)每當出現前一項比後一項大時,即將這兩項的值互換。如此下來,第0次循環結束時,10個數中最大的數已沉至底即a[9]已被最大的數替換,第1次循環結束時,a[8]被剩餘9個數中最大的數替換...第8次循環結束時a[1]被最後剩餘兩個數中較大者替換,a[0]則爲10個數中最小者。
一.選擇法
#include<stdio.h>
void main()
{void sort(int arrary[],int n);
int a[10],i;
printf("enter the array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
void sort(int array[],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
t=array[k]; array[k]=array[i]; array[i]=t;}
}
二.起泡法
#include<stdio.h>
void main()
{void sort(int arrary[],int n);
int a[10],i;
printf("enter the array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
void sort(int array[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;}
}