选择排序,复杂度O(n²)

package com.example.demo;

import org.junit.Test;
/**
* 选择排序
* @author zhzh.yin
*
*/
public class HTest {
@Test
public void testMethod(){
Integer [] numList = {1,2,2,2,1,4,5,2,5,3,9,6};
for(int i=0;i<numList.length-1;i++){
int max = numList[i];
for(int j = i+1;j<numList.length;j++){
if(numList[i]<numList[j]){
max = numList[j];
numList[j]=numList[i];
numList[i]=max;
}
}
}
for(int num:numList){
System.out.print(numList[num]+" ");
}
}
}

  

冒泡排序 复杂度 O(n2)

package com.example.demo;

import org.junit.Test;
/**
* 冒泡排序
* @author zhzh.yin
*
*/
public class FTest {
@Test
public void testMethod(){
Integer[]numList = {1,2,1,1,1,8,3,5,1};
if(numList.length==1){
System.out.println("-1");
}else if(numList.length==2){
String string ="";
System.out.println(
numList[1]>numList[2]?
numList[1]+""+numList[0]:numList.toString());;
}
int temp = 0;
for(int i =0;i<numList.length-1;i++){
for(int j=i+1;j<numList.length;j++){
if(numList[i]<numList[j]){
temp=numList[i];
numList[i]=numList[j];
numList[j]=temp;
}
}
}
for(int num :numList){
System.out.print(num+" ");
}
}
}

  

快速排序O(nlogn)

@Test
public void speedSortTest(){
Integer []numList={2,3,7,9,5,10,1,4};
speedSort(numList,0,numList.length-1);
for(int time:numList){
System.out.print(time+" ");
}
}
public void speedSort(Integer []numList,int lower,int higher){ if(lower>=higher){
return;
}
int temp=0;
int icon = numList[lower]; int indexofLeft = lower;
int indexofRight = higher;
while(indexofLeft<indexofRight){
while(icon<=numList[indexofRight]&&indexofLeft<indexofRight){
indexofRight--;
}
while(icon>=numList[indexofLeft]&&indexofLeft<indexofRight){
indexofLeft++;
} if(indexofLeft<indexofRight){
temp = numList[indexofRight];
numList[indexofRight]=numList[indexofLeft];
numList[indexofLeft]=temp;
}
for(int num:numList){
System.out.print(num+" ");
}
System.out.println();
}
temp=numList[indexofLeft];
numList[indexofLeft]=numList[lower];
numList[lower]=temp; speedSort(numList,lower,indexofLeft-1);
speedSort(numList,indexofRight+1,higher);
}

  

二分法查询-非迭代O(logn)

http://hedengcheng.com/?p=595

import org.junit.Test;
/**
* 找到数字N,适用于有多个重复数字,使用部分math原生方法向上取整/向下取整
* middle=min+(max-min)/2 算法更加准确
* 返回-1为没有找到
* @author zhzh.yin
*
*/
public class CTest {
@Test
public void testMethod(){
Integer[] num ={1,2,3,3,3,4,5,5,5,5,5,6,6,6,7,10};
System.out.println("the num is at "+selectPosition(num,8));
}
public int selectPosition(Integer [] numList,int num){
int min=0;
int max=numList.length-1;
int middle = -1;
while(min<=max){
middle = min+(max-min)/2;
System.out.println("min--"+min+",max--"+max+",middle--"+middle);
if((min==middle||max==middle)&&numList[middle]!=num){
middle = -1;
break;
}
if(numList[middle]<num){
min=(int) Math.floor(middle);
}else if(numList[middle]>num){
max=(int) Math.ceil(middle);
}else{
break;
}
}
return middle;
}
}

  

迭代+复杂化二分法

package com.example.demo;

import org.junit.Test;

/**
* 找出数组中最后一个6(或者8)的位置,复杂度O(nlogn),用迭代实现
*
* @author zhzh.yin flag==true 获取最右的坐标
*
*/
public class CTest {
@Test
public void testMethod() {
Integer[] num = { 1, 2, 3, 3, 3, 4, 5, 5, 5, 5, 5, 6, 6, 6, 7, 10 };
System.out.println("hello,position is " + selectPosition(num, 10, 0, num.length - 1, false));
} public int selectPosition(Integer[] numList, int num, int min, int max, Boolean flag) {
int middle = min + (max - min) / 2;
System.out.println("min-" + min + ",max-" + max + ",middle-" + middle);
if (min < max - 1) {
if (numList[middle] < num) {
return selectPosition(numList, num, (int) Math.floor(middle), max, flag);
} else if (numList[middle] > num) {
return selectPosition(numList, num, min, (int) Math.ceil(middle), flag);
} else if (numList[middle] == num && (min != max && min != max - 1)) {
if (flag) {
return selectPosition(numList, num, (int) Math.ceil(middle), max, flag);
} else {
return selectPosition(numList, num, min, (int) Math.floor(middle), flag);
}
}
} else{
if (numList[min] != num && numList[max] != num) {
middle = -1;
return middle;
} else if (numList[min] == numList[max]) {
return flag.equals(true) ? max : min;
} else if (numList[min] == num) {
return min;
} else {
return max;
}
}
return middle;
}
}

顺时针打印矩阵

递归

import org.junit.Test;

/**
* 顺时针打印矩阵
* @author user
*
*/
public class ATest {
//顺时针打印一个矩阵 @Test
public void test(){
int[][] num = new int[100][100];
int n = 6;
int count =1; for(int i=0;i<n;i++){
for(int j =0;j<n;j++){
num[i][j]=count++;
}
}
output(num,0,n-1);
}
/**
*
* @param num
* @param start
* @param end
*/
public void output(int[][] num,int start,int end){
if(start>end || end<=0)return;
for(int i=start;i<=end;i++){
System.out.println(num[start][i]);
}
for(int i=start+1;i<=end;i++){
System.out.println(num[i][end]);
}
for(int i=end-1;i>=start;i--){
System.out.println(num[end][i]);
}
for(int i=end-1;i>start;i--){
System.out.println(num[i][start]);
}
output(num,start+1,end-1);
}
}

  

找出出现次数最多的

先recordNum 再从hashMap里面找出value最大的

package com.example.demo;

import java.util.HashMap;
import java.util.Map; import org.junit.Test;
/**
* 找出出现次数最多的数值
* @author zhzh.yin
*
*/
public class BTest {
@Test
public void TestMethod(){
Integer []numList = {1,1,1,-1,2,3,44,4,5,6,9,9,9,9,9,8,7,6,5};
// chooseMax(recordNum(numList));
System.out.println(chooseMax(recordNum(numList),numList[0]));
} public HashMap <Integer,Integer> recordNum (Integer [] numList){
HashMap<Integer, Integer> map=new HashMap<>();
for(int num:numList){
if(map==null){
map.put(num, 1);
continue;
}
if(map.containsKey(num)){
map.put(num, map.get(num)+1);
}else{
map.put(num, 1);
}
}
return map;
}
public String chooseMax(HashMap<Integer, Integer>map,int num){
String string = "";
int key = num;
int time = map.get(key);
for(int keyActually :map.keySet()){
if(map.get(keyActually)>time){
time=map.get(keyActually);
key = keyActually;
}
}
string= "出现次数最多的数是"+key+" "+time+" "+map.toString();
return string;
}
}

  

把AB文件字符合并重排,输出到C

package com.example.demo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import org.junit.Test;
/**
* 把AB文件中的字符重排,输入到C
* @author zhzh.yin
*
*/
public class ETest {
@Test
public void TestMethod() throws IOException{
FileReader filea = new FileReader("C:\\Users\\user\\Downloads\\a.txt");
BufferedReader ina = new BufferedReader(filea) ;
FileReader fileb = new FileReader("C:\\Users\\user\\Downloads\\b.txt");
BufferedReader inb = new BufferedReader(fileb) ;
String line ;
char[]arr;
List<Character> list = new ArrayList<>();
BufferedWriter writerc= new BufferedWriter(new FileWriter("C:\\Users\\user\\Downloads\\c.txt"));
while((line=ina.readLine())!=null){
arr =line.toCharArray();
for(int i=0;i<arr.length;i++){
list.add(arr[i]);
}
}
ina.close();
while((line=inb.readLine())!=null){
arr =line.toCharArray();
for(int i=0;i<arr.length;i++){
list.add(arr[i]);
}
}
inb.close(); Object[]array = list.toArray();
Arrays.sort(array);
for(Object object:array){
writerc.write((char)object);
}
writerc.close();
FileReader filec = new FileReader("C:\\Users\\user\\Downloads\\c.txt");
BufferedReader read = new BufferedReader(filec);
while((line = read.readLine())!=null){
System.out.println(line);
}
read.close();
} }

  

找出出现2次的值

package com.example.demo;

import java.util.HashMap;
import org.junit.Test;
/**
* 找出出现2次的数值
* @author zhzh.yin
*
*/
public class GTest {
@Test
public void testMethod(){
Integer [] numList = {1,2,2,2,3,4,5,5,6,7,7};
HashMap<Integer,Integer> numMap = new HashMap();
for(int num :numList){
if (!numMap.containsKey(num)){
numMap.put(num, 1);
}else {
numMap.put(num, numMap.get(num)+1);
}
}
System.out.println(numMap);
for(HashMap.Entry<Integer, Integer>entry :numMap.entrySet()){
if(entry.getValue()==2){
System.out.print(entry.getKey()+" ");}
}
}
}

  

  

java 常用算法和一些题目的更多相关文章

  1. java常用算法

    冒泡排序: //降序 public static int[] bubbleSort(int[] array){ for(int i = 0; i < array.length; i++){ in ...

  2. Java常用算法总结

    冒泡排序 从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以让未排序的最大元素上浮到右侧. 在一轮循环中,如果没有发生交换,那么说明数组已经是有序的,此时可以直接退出. 代码如下: public ...

  3. java常用算法笔记

    1.将一个10进制的c转换为n进制 String s=new BigInteger(c+"",10).toString(n); 2. 求一个解退出 System.exit(0): ...

  4. 常用Java排序算法

    常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...

  5. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  6. 使用Java练习算法常用的基本操作

    一.使用Java练习算法常常需要使用控制台的数据输入和输出,下面记录一下基本的使用方法: 基本用法 import java.util.*; public class Main { public sta ...

  7. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  8. 【Java】-NO.13.Algorithm.1.Java Algorithm.1.001-【Java 常用算法手册 】-

    1.0.0 Summary Tittle:[Java]-NO.13.Algorithm.1.Java Algorithm.1.001-[Java 常用算法手册 ]- Style:Java Series ...

  9. Java常用排序算法及性能测试集合

    测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...

随机推荐

  1. 中检测到有潜在危险的 Request.Form 值

    经常会出现从客户端(xxx)中检测到有潜在危险的 Request.Form 值. 这个问题我们只用在web.config中添加一句代码即可 <system.web> <pages v ...

  2. 51.Qt-使用ajax获取ashx接口的post数据

    由于当前C++项目需要使用ajax库去post调用ashx接口,接口地址如下所示: 需要传递的参数如下: 然后发现qml比较好调用ajax.js库,所以本章通过C++界面去获取qml方法来实现调用as ...

  3. rest_framework之ModelViewSet、路由控制、序列化组件快速搭建项目雏形

    以UserInfo表登陆接口为例 ModelViewSet的用法十分简单,定义一个视图类,指定一个模型表,指定一个序列化类即可帮我们完成增删改查等功能 示例: # 视图层 from app01.MyS ...

  4. React native 放大点击区域 hitSlop属性的使用

    在日常的需求中,如上图的加减按钮,可能写ui布局的时候没考虑实际的这个点击范围太小,不利于真机上用户点击到,如果加包裹层加padding的话又会影响原先定好的布局,或者不利于对齐. 那么可以用  hi ...

  5. 乐字节Java构造器(构造方法|构造函数)、方法与内存分析

    一. 构造器(构造方法|构造函数) 在创建对象时(new),必会调用一个特殊的方法,这个方法是初始化对象信息的为new服务的.这个方法称为“构造器” 使用 new + 构造方法创建一个新的对象. 构造 ...

  6. 【转帖】Linux 内核系统架构

    Linux 内核系统架构   描述Linux内核的文章已经有上亿字了 但是对于初学者,还是应该多学习多看,毕竟上亿字不能一下子就明白的. 即使看了所有的Linux 内核文章,估计也还不是很明白,这时候 ...

  7. EventLoop介绍

    在Netty中使用EventLoop接口代表事件循环,EventLoop是从EventExecutor和ScheduledExecutorService扩展而来,所以可以讲任务直接交给EventLoo ...

  8. ubuntu18和windows10双系统时间不同步问题(Ubuntu)

    1.安装并校准时间 sudo apt install ntpdate sudo ntpdate time.windows.com 2.写入硬件配置 sudo hwclock --localtime - ...

  9. List 报错 java.lang.UnsupportedOperationException

    废话不多说,上代码 public class ArrayListTest { @Test public void testList() { List<Long> longList = ne ...

  10. 1269: 划分数(Java)

    WUSTOJ 1269: 划分数 参考博客 果7的博客 题目   将 1 个数 n 分成 m 份,求划分的种数.更多内容点击标题. 分析   唯一需要注意的地方是不考虑顺序.其他的直接看代码即可. 代 ...