首页 > 技术文章 > 数组算法题2_25+冒泡与快速排序

qian2015 2019-02-25 20:29 原文

Leetcode 217   存在重复元素

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

//	实现原则:判断一个数组中是否存在重复元素,返回布尔值类型。
//  实现原理:对数组进行排序,之后进行判断是否存在重复元素。
	public boolean containsDuplicate(int[] nums) {
//		对数组进行排序o(nlogn)
		Arrays.sort(nums);
		boolean same=false;
		if(nums==null){
			return true;
		}
		int i=0;
		while(i<nums.length){
			if(i==nums.length-1){
				break;
			}
			if(nums[i]==nums[i+1]){
				return true;
			}
			i++;
		}
		return false;
        
    }

 排序小结:

少看多练,才是正道。

public class 排序算法总结 {
	
//	数组的定义
	int []arr=new int[5];
	int []arr1={1,2,3,4,5};
	long []str2=new long[6];
	String []strs=new String[5];
	
//	数组的操作:冒泡排序
	public static void bubbleSort(int[] numbers){
		int temp=0;
		
//		N个数要比较的轮次是N-1轮
		for(int i=0;i<numbers.length-1;i++){
			
//			每一轮比较的次数是N-1-i
			for(int j=0;j<numbers.length-i-1;j++){
				if(numbers[i]>numbers[j]){
					temp=numbers[i];
					numbers[i]=numbers[j];
					numbers[j]=temp;
				}
			}
		}
		
		
	}
	
	
	 public static int getMiddle(int[] numbers, int low,int high){
//		 low位置作为起始位置
		 int start=numbers[low];
		 while(low<high){
//			 从后向前找到第一个小于low的数进行交换
			 while(low<high && numbers[high]>start){
				 high--;
			 }
			 numbers[low]=numbers[high];
			 
//			 从后向前找到第一个大于high的元素进行交换
			 while(low<high && numbers[low]<start){
				 low++;
			 }
			 numbers[high]=numbers[low];
			 
//			 中轴移动到队尾
			 numbers[low]=start;
			 return low; 
		 }
	 }
	
	 
	 public static void quickSort(int[] numbers,int low,int high){
		 if(low<high){
			 int middle=getMiddle(numbers, low, high);
			 quickSort(numbers, low, middle-1);
			 quickSort(numbers, middle+1, high);
		 }
		 
		 
	 }
	
	

}

  

 

推荐阅读