1.冒泡排序
冒泡排序是一种典型的贪心算法,执行完最外层的一次循环就会出现一个最值,最外层循环完毕,排序也就做好了。而内层的循环用于冒泡,也就是比较两个局部值的大小,两个大小不满足if条件就会交换。
//对数组进行冒泡排序,排序函数输入头指针以及数组长度
#include<stdio.h>
int main(){
void bubblesort(int*b,int n);
int a[]={0,11,5,7,9,12,3,46,8,9,5,1,13,14};
int length = sizeof(a)/sizeof(a[0]);
bubblesort((int*)a,length);
getchar();
return 0;
}
void bubblesort(int *b,int n){
int k,i,j,z;
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
if(b[i]>b[i+1])
{k=b[i];b[i]=b[i+1];b[i+1]=k;}
printf("the sorted sequist is:");
for(z=0;z<n;z++)
printf("%d,",b[z]);
}
2.选择排序
选择排序与冒泡排序的思想差别在于选择排序并不是执行一次外部循环之后只用交换一次。执行内部循环的原因是为了能找到最值,然后执行一次外部循环就交换一次最值。所以在最坏情况时,冒泡排序要交换次,而选择排序只用交换n次。
//对数组进行选择排序;
#include<stdio.h>
int main(){
void selectsort(int*b,int n);
int a[]={1,3,7,99,20,4,8,2,12,9,3,25,18,36,22};
int length = sizeof(a)/sizeof(a[0]);
selectsort((int*)a,length);
getchar();
return 0;
}
void selectsort(int*b,int n){
int i,j,k,t,z;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(b[k]>b[j]) k=j;
}
t=b[k];b[k]=b[i];b[i]=t;//必须要交换数组,如果采用最后存的方式则有问题
}
printf("the selectsort result is:");
for(z=0;z<n;z++)
printf("%d,",b[z]);
}