C语言中的三种排序方法
1、交换排序:借鉴了求最大值,最小值的思想,按升序排列的基本过程为:先将第一个数分别与后面的数进行比较,若后面是的数小,则交换和第一个数的位置,否则不交换:这一轮结束之后,则求除了一个最小的放在第一个位置,然后进行第二轮比较,但这种交换效率低
package cho2;
public class changeSort {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//对给定的数组进行排序
int[] a={53,54,56,51};
int i;
int j;
int temp=0;
//注意不要数组越界 如果i小于4或者j小于5都会有越界的
//现象
//注意交换中不能时时刻刻用i+1代替j;
for(i=0;i<3;i++){
for(j=i+1;j<4;j++){
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<4;i++){
System.out.println(a[i]);
}
}
}
2、冒泡排序:将相邻两个数进行交换,重复的过程,一般,如果有N个数进行排序,则需进行N-1起泡
package cho2;
public class maopao {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] a={53,54,56,51};
int i;
int j;
int m=0;
int temp=0;
for(i=0;i<3;i++){
m=m-1;
//4+m主要为了减少运行的次数
for(j=0;j<4+m;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<4;i++){
System.out.println(a[i]);
}
}
}
3、选择排序:在交换排序的基础上,找出余下的数中的最大值再与地I+1个数进行交换,这样每一轮比较中最多只有一次交换操作,这个算法最多只有N—1次交换操作
package cho2;
public class selectSort {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] a={53,54,56,51};
int i;
int j;
int k;
int temp=0;
for(i=0;i<3;i++){
k=i;
for(j=i+1;j<4;j++){
if(a[i]>a[j]){
k=j;
}
}
if(k!=i){
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
for(i=0;i<4;i++){
System.out.println(a[i]);
}
}
}