总结一些工作中用到的方法,后续还会继续总结,补充!
/**
* 1.冒泡排序
* @author wmj
*
*/
public static int[] BubbleSort(int[] arr) {
int temp;//定义一个临时变量
for(int i=0;i<arr.length-1;i++){//冒泡趟数
for(int j=0;j<arr.length-i-1;j++){
if(arr[j+1]<arr[j]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
/**
* 2.双向冒泡排序
* @param args
*/
public static int[] bubbSort2(int[] arr){
int left =1 ;
int right = arr.length -1;
int t=0;
while(left<=right){
for(int i=right;i>=left;i--){
if(arr[i]<arr[i-1]){
int temp;
temp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = temp;
t = i;//记录上一次交换的下标
}
}
left = t+1; //t+1中间乱序部分的最左端
for(int i=left;i<right+1;i++){
if(arr[i]<arr[i-1]){
int temp;
temp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = temp;
t = i;//记录上一次交换的下标
}
}
right = t-1;//t-1为中间乱序部分的最右端
}
return arr;
}
/**
* 3.简单排序
* @param a
*/
public static int[] selectSort(int[] arr){
int temp=0;
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[i]){
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
return arr;
}
/**
* 4.插入排序
* @param arr
*/
public static int[] insertSort(int[] arr){
for(int i=1;i<arr.length;i++){
int temp = arr[i],j=i ;
if(arr[j-1]>temp){
while(j>=1&&arr[j-1]>temp){//找到新元素合适的位置
arr[j] = arr[j-1];//前一个覆盖后一个
j--;
}
}
arr[j]=temp; //插入元素
}
return arr;
}
/*
* 判断是否存在重复数据,有的话返回true
*/
public static boolean containsDuplicate(int[] nums) {
Arrays.sort(nums);
for(int i = 0; i < nums.length-1; i++) {
if(nums[i] == nums[i+1]) {
return true;
}
}
return false;
}
/*
* 判断是否存在重复数据,有的话返回true
*/
public static boolean containsDuplicatebyset(int[] nums) {
Set<Integer> save = new HashSet<Integer>();
for(int a : nums){
//Set.add(Object)添加失败会返回false
if(!save.add(a))return true;
}
return false;
}
/**
* main方法
* @param args
*/
public static void main(String[] args) {
// int arr[] = new int[]{89,6,100,2,45,61,77,25};
// BubbleSort.BubbleSort(arr);
// System.out.println(Arrays.toString(arr));
int arr[]=new int[]{11,22,77,33,44,55,66,77};
int[] qq=insertSort(arr);
for (int i = 0; i < qq.length; i++) {
System.out.println(qq[i]);
}
}