JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java几种排序方式

wys521 2024-11-28 08:58:23 精选教程 22 ℃ 0 评论
//冒泡排序
public static void bubbleSort(int[] arr){
//用来记录数据,便于互换数据
int temp = 0;
//当倒数第二个数确定,则无需继续排序。故为arr.length -1次
	for (int i = 0; i < arr.length -1; i++){
	/*从第一个数开始,让它跟往后一个数进行比较,然后如此类推,因为第一层每执行完一趟,
	都会确定数组末尾的一个数,已确定的数不需要加入比较,固有arr.length - i
	 同时,每一次剩最后两个数时只需要执行一次,所以arr.length - i -1次
	 */
		for (int j = 0;j < arr.length - i - 1; j++ ){
		//如果发现后一个数比前一个数小,则相互交换位置
			if(arr[j] > arr[j+1]){
			    temp = arr[j];
			    arr[j] = arr[j+1];
			    arr[j+1] = temp;
			}
		}
	}
}
//选择排序
    public static void selectionSort(int[] arr){

        //定义一个数,用于记录找到的数
        int temp = 0;
        //第一层for循环为执行的总次数,因为执行到倒数第二个数是,数组已经有序,故arr.length -1
        for(int i = 0; i < arr.length -1; i++){
            //用于记录下标
            int index = i;
            //这里是从i开始后的所有数都要进行比较
            for (int j = i + 1;j < arr.length; j++){
                //如果发现有比arr[i]大的,则更新下标,这样是为了最终找到最小的那个数的下标
                if (arr[index] > arr[j]){
                    index = j;
                }
            }
            //如果进入循环前的i发生了变化,则证明有数更小,并且更小的数,下标为j,直接交换即可
            if (index != i){
                temp = arr[index];
                arr[index] = arr[i];
                arr[i] = temp;
            }
        }
    }
//插入排序
public static void insertSort(int[] arr){
//用于记录数据以及下标
int temp = 0 , j = 0;
//从第二个数(即 i = 1)开始进行对前面进行插入
    for(int i = 1; i < arr.length; i++){
    //记录这个数以及下标
    temp = arr[i];
    j = i;

    //记录下的temp比它前面的数(j - 1)要小,则往前插入,当j = 0时为最前面的数了,所以结束
    while (j > 0 && temp <arr[j - 1]){
    //直接让在自己前面的数将自己覆盖(可以看成是前面的数往后退了),因为已经用temp记录下来了
        arr[j] = arr[j-1];
        //然后继续往前找
        j--;
    }
    //循环结束后,则说明已经找到了位置,而且下标为j,直接插入即可
        arr[j] = temp;
    }
}
 //希尔排序
	    public  static void SellSort(int[] arr){
	        /*不停对 原数组 进行分组,step为每个数组的元素之间 的距离
	        (这里是看作是不同数组,实际在同一个数组中)
	          不停的缩小距离(step),则是将数组分得更小,直到step = 1(成为一个数组)
	         */
	        for(int step = arr.length/2; step > 0 ; step = step/2){
	
	            /*
	             从下标step开始为一个数组的第二个数,然后进行插入排序
	             step + 1 为下一个数组第二个数,进行插入排序,以此类推
	             */
	            for (int i = step ; i < arr.length; i++){
	                //这操作与插入排序相同,结合插入排序理解
	
	                //记录数以及下标
	                int j = i;
	                int temp = arr[j];
	                //数组的前一个数(arr[j - step])比trmp大则继续插入,当(j - step) > 0 则说明已经到了数组最前面的数
	                while ((j - step) > 0 && arr[j - step] > temp){
	                    arr[j] = arr[j - step];
	                    j = j - step;
	                }
	                //找到位置则插入
	                arr[j] = temp;
	            }
	        }
	    }

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表