冒泡排序:冒泡排序,从下面两个开始比较,选一个最小的或者最大的网上冒,第一个for循环之后,第一个一定是最大的或最小的,i+1后,开始选第二最大或最小,放在第二位;
int a[]={1,3,4,7,2,5,6,8};
int i,j,n=8,temp;
for(i=0;i<n;i++){
for(j=n-1;j>i;j--){
if(a[j-1]>a[j]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
改进增加标志位 flag,当一次都没有移动就可以结束排序
for(i=0;i<n&&flag!=0;i++){
for(j=n-1;j>i;j--){
flag=0;
if(a[j-1]>a[j]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
flag=1;
}
}
}
选择排序:选择排序,一开始从假设从头开始有序,然后for第一其他位置比较,选出最小的与第一个交换位置,此时1一个最小,i++第二顺位开始与其他位置比较,交换位置
t a[]={1,3,4,7,2,5,6,8};
int i,j,n=8,temp ,min;
for(i=0;i<n;i++){
min=i;
for(j=i+1;j<n;j++){
if(a[j]<a[min]){
min=j;
}
}
if(min!=i){
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
直接插入排序:从第i个元素开始与前一个元素比较,前一个元素大于后一个,就开始移动,首先将最小的放到temp中,前一个往后移,直到前一个小于temp退出循环,temp的值放到“前一个+1”
int a[]={1,3,4,7,2,5,6,8};
int i,j,n=8,temp;
for(i=1;i<n;i++){
if(a[i]<a[i-1]){
temp=a[i];
for(j=i-1;a[j]>temp;j--){
a[j+1]=a[j];
}
a[j+1]=temp;
}
}