• 数组的几种排序算法的实现


           数组的排序方法有很多,效率也各不相同,下面简单介绍一下几种常见的排序算法。

          1.选择排序法:将要排序的数组分成两部分,一部分是从大到小已经排好序的,一部分是无序的,从无序的部分取出最小的放到已经排序的最后面。实现如下:

    public int[] choiceSort(int[] arr){
    		for(int i = 0;i < arr.length;i++){
    			int m = i;
    			for(int j = i + 1;j < arr.length;j++){
    				//如果第j个元素比第m个元素小,将j赋值给m
    				if(arr[j] < arr[m]){
    					m = j;
    				}
    			}
    			//交换m和i两个元素的位置
    			if(i != m){
    				int t = arr[i];
    				arr[i] = arr[m];
    				arr[m] = t;
    			}
    		}
    		return arr;
    	}
           2.冒泡排序法:冒泡排序的思路就不用介绍了。上实现:

    public int[] bubbleSort(int[] arr){
    		for(int i = 0;i < arr.length;i++){
    			//比较两个相邻的元素
    			for(int j = 0;j < arr.length-i-1;j++){
    				if(arr[j] > arr[j+1]){
    					int t = arr[j];
    					arr[j] = arr[j+1];
    					arr[j+1] = t;
    				}
    			}
    		}
    		return arr;
    	}
          3.插入排序法:将要排序的数组分成两部分,每次从后面的部分取出索引最小的元素插入到前一部分的适当位置。基本实现如下:
    public int[] insertSort(int[] arr){
    		for(int i = 1;i < arr.length;i++){
    			int temp = arr[i];
    			int j = i - 1;
    			while(temp < arr[j]){
    				arr[j+1] = arr[j];
    				j--;
    				if(j == -1){
    					break;
    				}
    			}
    			arr[j+1] = temp;
    		}
    		return arr;
    	}
          3.快速排序法:快速排序法号称是目前最优秀的算法之一,实现思路是,将一个数组的排序问题看成是两个小数组的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。实现如下:
    public int[] fastSort(int[] arr,int left,int right){
    		if(left < right){
    			int s = arr[left];
    			int i = left;
    			int j = right + 1;
    			while(true){
    				//向右找大于s的元素的索引
    				while(i+1 < arr.length && arr[++i] < s);
    				//向左找小于s的元素的索引
    				while(j-1 > -1 && arr[--j] > s);
    				//如果i >= j 推出循环
    				if(i >= j){
    					break;
    				}else{
    					//教化i和j位置的元素
    					int t = arr[i];
    					arr[i] = arr[j];
    					arr[j] = t;
    				}
    			}
    			arr[left] = arr[j];
    			arr[j] = s;
    			//对左面进行递归
    			fastSort(arr,left,j-1);
    			//对右面进行递归
    			fastSort(arr,j+1,right);
    		}
    		return arr;
    	}




  • 相关阅读:
    kettle处理未发现hadoop插件问题
    文档公式编辑神器-Snip
    hive -e执行出现「cannot recognize input near '<EOF>' in select clause」问题
    hive从本地导入数据时出现「Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask」错误
    K-Means算法的Python实现
    kettle并行运行时出现「Unknown error in KarafBlueprintWatcher」
    初识 Kafka Producer 生产者
    一次 RocketMQ 进程自动退出排查经验分享(实战篇)
    再谈 RocketMQ broker busy(实战篇)
    RocketMQ 升级到主从切换(DLedger、多副本)实战
  • 原文地址:https://www.cnblogs.com/SunnyYue/p/3970289.html
Copyright © 2020-2023  润新知