C语言中的三种排序方法
你是不是在为冒泡排序,选择排序,交换排序而烦恼呢,下面就叫你来分辨这几种排序吧
操作方法
- 01
交换排序:借鉴了求最大值,最小值的思想,按升序排列的基本过程为:先将第一个数分别与后面的数进行比较,若后面是的数小,则交换和第一个数的位置,否则不交换:这一轮结束之后,则求除了一个最小的放在第一个位置,然后进行第二轮比较,但这种交换效率低 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]); } } }
- 02
冒泡排序:将相邻两个数进行交换,重复的过程,一般,如果有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]); } } }
- 03
选择排序:在交换排序的基础上,找出余下的数中的最大值再与地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]); } } }