java语言描述数据结构与算法崔笑颜的博客

冒泡排序 插入排序 选择排序 希尔排序 快速排序 归并排序 二分查找package com.demo.test;

import java.util.Arrays;
import java.util.Scanner;
public class TestDemo{
public static void main(String[] args) {
//随机输入n个数,存放在数组a中
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int a[]=new int[n];
//这是第一种输入方法
/*for (int i=0;in;i++) {
a[i]=scanner.nextInt();
}*/
//这是第二种输入方法
int k=0;
while(true) {
if(kn) {
a[k]=scanner.nextInt();
k++;
}else {
break;
}
}
int[] b=choicSort(a);
for (int j=0;jb.length;j++) {
System.out.print(b[j]+ );
}
}
//冒泡排序
private static int[] bubbleSort(int[] array) {
for (int i=1;iarray.length;i++) {
for (int j=0;jarray.length-i;j++) {
if (array[j]array[j+1]) {
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}
//插入排序
private static int[] insertSort(int[] array) {
for (int i=1;iarray.length;i++) {
int j=i;
int temp=array[i];
while (j0array[j-1]temp) {
array[j]=array[j-1];
j--;
}
array[j]=temp;
}
return array;
}
//选择排序
private static int[] choicSort(int[] array) {
for (int i=0;iarray.length-1;i++) {
int min=i;
for (int j=i+1;jarray.length;j++) {
if (array[j]array[min]) {
min=j;
}
}
if (min!=i) {
int temp=array[i];
array[i]=array[min];
array[min]=temp;
}
}
return array;
}
//希尔排序
private static int[] shellSort(int[] array) {
int step=(array.length-1)/2;
while (step0) {
for (int i=step;iarray.length;i++) {
int j=i;
int temp=array[i];
while(j(step-1)array[j-step]=temp) {
array[j]=array[j-step];
j=j-step;
}
array[j]=temp;
}
step=step/2;
}
return array;
}
//快速排序
private static void quickSort(int[] array) {
reQuickSort(array,0,array.length-1);
}
private static void reQuickSort(int[] array,int left,int right) {
if (left=right) {
return ;
}else {
int partition=partitionIt(array,left,right);
reQuickSort(array,left,partition-1);
reQuickSort(array,partition+1,right);
}
}
private static int partitionIt(int[] array,int left,int right) {
int i=left;
int j=right+1;
int povit=array[left];
while (true) {
while (irightarray[++i]povit) {}
while (j0array[--j]povit) {}
if (ij) {
swap(array,i,j);
}else {
break;
}
}
swap(array,left,j);
return j;
}
private static void swap(int[] array,int i,int j) {
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
//归并排序
private static int[] sort(int[] a,int low,int high){
int mid = (low+high)/2;
if(lowhigh){
sort(a,low,mid);
sort(a,mid+1,high);
//左右归并
merge(a,low,mid,high);
}
return a;
}
private static void merge(int[] a, int low, int mid, int high) {
int[] temp = new int[high-low+1];
int i= low;
int j = mid+1;
int k=0;
// 把较小的数先移到新数组中
while(i=mid j=high){
if(a[i]a[j]){
temp[k++] = a[i++];
}else{
temp[k++] = a[j++];
}
}
// 把左边剩余的数移入数组
while(i=mid){
temp[k++] = a[i++];
}
// 把右边边剩余的数移入数组
while(j=high){
temp[k++] = a[j++];
}
// 把新数组中的数覆盖nums数组
for(int x=0;xtemp.length;x++){
a[x+low] = temp[x];
}
}
//二分查找
private static int binarySerach(int[] array,int left,int right,int value) {
int i=left;
int j=right;
int mid=(i+j)/2;
if (ij) {
return -1;
}
if (array[mid]value) {
return binarySerach(array,0,mid-1,value);
}else if(array[mid]value){
return binarySerach(array,mid+1,right,value);
}else {
return mid;
}
}
}

java语言描述数据结构与算法崔笑颜的博客 相关文章

贪心算法移除K个数字崔笑颜的博客

题目描述:有一 十进制正整数,移除其中的 K 个数,使剩下的数字是所有可能中最大的。 假设: 字符串的长度一定大于等于 K 字符串不会以 0 开头 输入:1432219 3 输出:4329 算法: import java.util.Scanner;import java.util.Stack; public class DeleteK

Java|ArrayList源码分析|add()增加方法和grow()扩容方法

本文结构: 1.介绍特点 2.基本方法 3.重点源码分析 1.介绍特点 ArrayList: 是List的一个具体实现子类,是List接口的一个数组实现 (里面必定维护了一个数组)。 默认初始容量10, 扩容机制1.5倍。(数组必然有初始容量和扩容机制) 有序。 允许null元素。 允

DocumentBuilderFactory.setFeature调用失败的问题分析、解决javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V异常

mybatis启动报错 1. DocumentBuilderFactory加载顺序 使用 javax.xml.parsers.DocumentBuilderFactory 系统属性; System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl")

解释器模式(Interpretor)_java实现

//20200202 写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现解释器模式 解释器模式核心思想 构建语法树,然后将输入的值根据语法树执行 程序源代码: 此处实现一个加减运算的解释器,输入算式,输入参数

肝了一个半月的 Java 项目快速开发脚手架:Chewing

前言 闲来无事,整一个 Java 项目快速开发脚手架。 正文 一、简介 Chewing 是一个简单的 Java 项目快速开发脚手架。既适合需要开发小型项目的小伙伴使用,也适合刚入门的新手用来学习一些常用的技术。 二、源码 源码地址:https://github.com/jingqueyimu/ch

Java 的 Mutable 和 Immutable 对象

Mutable object(可变对象) :当对象被创建后,你可以修改对象的状态以及字段。例如 StringBuilder , java.util.Date Immutable object (不可变对象) :当对象被创建后,你不能修改对象的状态以及字段,例如包装类,如: Integer, Long,String 等。 绕

C语言链表——头插法和尾插法

#define _CRT_SECURE_NO_WARNINGS#includestdio.h#includestdlib.htypedef struct ListNode{ int val; ListNode* next;}Node_t, *pNode_t;void print_list(ListNode *head) { ListNode *p = head; while (p != nullptr) { printf("%d ", p-val); p = p-next;

第25天学习打卡

JAVA常用工具API(导学) API的使用: 使用步骤 举例: 顶层父类:Object 控制台录入:Scanner 字符串处理:String 字符串处理:StringBuilder和StringBuffer 日期获取:Date和Calender 基本类型的包装类 根据步骤查找API文档使用对应功能: 查找类 查看模块

地平线

题目描述 Farmer John的牛们认为,太阳升起的那一刻是一天中最美好的,在那时她们 可以看到远方城市模糊的轮廓。显然,这些轮廓其实是城市里建筑物模糊的影子。 建筑物的影子实在太模糊了,牛们只好把它们近似地看成若干个边长为1单位 长度的正方体整齐地叠

KMP模板

题目描述 给定一个字符串 A 和一个字符串 B,求 B 在 A 中的出现次数。 A 中不同位置出现的 B 可重叠,详见样例二、四。 输入格式 输入共两行,分别是字符串 A 和字符串 B。 输出格式 输出一个整数,表示 B 在 A 中的出现次数。 样例数据 input RachelAhhhhh