三种基本的数据排序方法
package com.beyondlife.demo2;/* * 这个类拥有三个静态方法用于数组排序 * */public class NumberSort {public static final int ASC = 1; //升序排列public static final int DES = 2; //降序排列/*冒泡排序 * 算法设计:此算法利用前后的元素大小进行比较,交换位置; * 要实现整个数组的排序需要使用外循环来控制遍历次数; * 内循环来控制前后两元素的比较次数,一次内循环之后可以找出最大的或最小的放在右边. * */public static void bubbleSort(int list[],int type){int length = list.length;//数组的数据个数int flag = 1; //标志位,判断此数组本身是否已经有序int temp = 0; //中间数据,用于位置替换int i = 0; //用于循环次数int j = 0; //用于比较次数if(type == ASC){ //升序排序flag = 1;for(i = 1;i < length && flag == 1;i++){ //控制循环次数flag = 0;for(j = 0;j < length - i;j++){ //控制比较次数if(list[j] > list[j+1]){temp = list[j];list[j] = list[j + 1];list[j + 1] = temp;flag = 1; //修改标志位}//end if}//end inner for}//end outter for}else if(type == DES){ //降序排序flag = 1;for(i = 1;i < length && flag == 1;i++){ //控制循环次数for(j = i + 1;j < length - i;j++){ //控制比较次数if(list[j] < list[j+1]){temp = list[j];list[j] = list[j + 1];list[j + 1] = temp;flag = 1; //修改标志位}//end if}//end inner for}//end outter for}}/*选择排序 * 算法设计:选择排序不需要每比较两个元素就交换两其位置, * 而是每次扫描一遍数据找出最大或最小的元素把其与左边排好序的元素的下一元素交换位置 * */public static void selectSort(int list[],int type){int length = list.length; //数组的元素个数int pos = 0; //最大或最小元素的位置int i = 0; //控制循环的次数int j = 0; //用于查找元素的位置int temp = 0; //用于临时交换位置的元素if(type == ASC){//升序排序for(i = 0;i < length ;i++){pos = i;for(j = i + 1;j < length;j++){if(list[j] < list[pos])//查找未排序部分的最小元素pos = j;}//end inner forif(pos != i){ temp = list[i];list[i] = list[pos];list[pos] = temp;}}//end outer for}else if(type == DES){//降序排序for(i = 0;i < length ;i++){pos = i;for(j = i + 1;j < length;j++){if(list[j] > list[pos])//查找未排序部分的最大元素pos = j;}//end inner forif(pos != i){ temp = list[i];list[i] = list[pos];list[pos] = temp;}}//end outer for}}/*插入排序 *算法设计:此算法也是局部有序的,这里假设左边有序, *那么现在需要把有序的下一个元素插入到有序的一端, *这样需要移动有序的一端使空出合适的位置给插入原素 */public static void insertSort(int list[],int type){int length = list.length; //数组的元素个数int i = 0; //控制循环的次数int j = 0; //用于定位元素int temp = 0; //用于临时交换位置的元素if(type == ASC){//升序排序for(i = 1;i < length;i++){ //控制循环次数j = i;temp = list[i];while(j > 0 && list[j - 1] > temp){//找到插入的位置list[j] = list[j-1]; //比插入元素大的元素须向后移动j--;}list[j] = temp; //插入元素}//end for}else if(type == DES){for(i = 1;i < length;i++){ //控制循环次数j = i;temp = list[i];while(j > 0 && list[j - 1] < temp){//找到插入的位置list[j] = list[j-1]; //比插入元素小的元素须向后移动j--;}list[j] = temp; //插入元素}//end for}}}?