package com.linzhanghui.algorithm;
//二分法
public class OrdArray {
private long[] a;
private int nElems;
public OrdArray(int max) {
a = new long[max];
nElems = 0;
}
public int size(){
return nElems;
}
public int find(long searchKey) {
int lowerBound = 0;
int upperBound = nElems - 1;
int curIn;
while (true) {
curIn = (lowerBound + upperBound) / 2;
if(a[curIn] == searchKey)
return curIn;
else if(lowerBound > upperBound)
return nElems;
else {
if(a[curIn] < searchKey)
lowerBound = curIn + 1;
else
upperBound = curIn - 1;
}
}
}
public void insert(long value) {
int j;
for(j=0; j<nElems; j++)
if(a[j] > value)
break;
for(int k=nElems; k>j; k--)
a[k] = a[k-1];
a[j] = value;
nElems++;
}
public boolean delete(long value) {
int j = find(value);
if(j == nElems)
return false;
else {
for(int k=j; k<nElems; k++)
a[k] = a[k+1];
nElems--;
return true;
}
}
public void display() {
for(int j=0; j<nElems; j++)
System.out.print(a[j] + " ");
System.out.println(" ");
}
}
package com.linzhanghui.algorithm;
public class OrderedApp {
public static void main(String[] args) {
int maxSize = 100;
OrdArray arr = new OrdArray(maxSize);
arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33);
int searchKey = 55;
if(arr.find(searchKey) != arr.size())
System.out.println("找到" + searchKey);
else
System.out.println("找不到" + searchKey);
arr.display();
arr.delete(00);
arr.delete(55);
arr.delete(99);
arr.display();
}
}
package com.linzhanghui.algorithm;
/*
* 冒泡排序,时间复杂度O(n^2)
* 简单描述:
* 两两比较,比较出最大的一个数放在最后位置
* 剩下的继续比较
*
*/
public class ArrayBub {
private long[] a;
private int nElems;
public ArrayBub(int max) {
a = new long[max];
nElems = 0;
}
public void insert(long value) {
a[nElems] = value;
nElems++;
}
public void display() {
for(int j=0; j<nElems; j++)
System.out.print(a[j] + " ");
System.out.println("");
}
public void bubbleSort() {
int out, in;
for(out=nElems-1; out>1; out--)
for(in=0;in<out;in++)
if(a[in] > a[in+1])
swap(in, in+1);
}
private void swap(int one,int two) {
long temp = a[one];
a[one] = a[two];
a[two] = temp;
}
}
package com.linzhanghui.algorithm;
public class BubbleSortApp {
public static void main(String[] args) {
int maxSize = 100;
ArrayBub arr = new ArrayBub(maxSize);
arr.insert(77);
arr.insert(99);
arr.insert(44);
arr.insert(55);
arr.insert(22);
arr.insert(88);
arr.insert(11);
arr.insert(00);
arr.insert(66);
arr.insert(33);
arr.display();
arr.bubbleSort();
arr.display();
}
}
package com.linzhanghui.algorithm;
/*随机生成1000个数字,并归并快速排序;
*/
public class ArrayIns {
private long[] theArray;
private int nElems;
public ArrayIns(int max) {
theArray = new long[max];
nElems = 0;
}
public void insert(long value) {
theArray[nElems] = value;
nElems++;
}
public void display() {
System.out.print("A=");
for(int j=0; j<nElems; j++)
System.out.print(theArray[j] + " ");
System.out.println("");
}
public void quickSort() {
recQuickSort(0, nElems-1);
}
public void recQuickSort(int left, int right) {
if(right-left <= 0)
return;
else {
long pivot = theArray[right];
int partition = partitionIt(left, right, pivot);
recQuickSort(left, partition-1);
recQuickSort(partition+1, right);
}
}
public int partitionIt(int left, int right, long pivot) {
int leftPtr = left-1;
int rightPtr = right;
while(true) {
while(theArray[++leftPtr] < pivot);
while(rightPtr > 0 && theArray[--rightPtr] > pivot );
if(leftPtr >= rightPtr)
break;
else
swap(leftPtr, rightPtr);
}
swap(leftPtr, right);
return leftPtr;
}
public void swap(int dex1, int dex2) {
long temp = theArray[dex1];
theArray[dex1] = theArray[dex2];
theArray[dex2] = temp;
}
}
package com.linzhanghui.algorithm;
public class QuickSort1App {
public static void main(String[] args) {
int maxSize = 1000;
ArrayIns arr = new ArrayIns(maxSize);
for(int j=0; j<maxSize; j++) {
long n = (int)(java.lang.Math.random()*999);
arr.insert(n);
}
arr.display();
arr.quickSort();
arr.display();
}
}
分享到:
相关推荐
本资源提供了"数据结构与算法Java语言描述(源代码)",帮助学习者通过实际代码深入理解这些概念。 1. **数组**:数组是最基本的数据结构,它允许存储固定数量的相同类型元素。在Java中,数组可以是一维、二维或...
本资源提供了"数据结构与算法Java语言描述 第二版 部分代码实现",这意味着你将能够学习到如何使用Java来实现各种数据结构和算法。 1. **数组**:数组是最基本的数据结构,它允许存储固定大小的同类型元素集合。在...
本书“数据结构与算法分析+Java语言描述(原书第3版)”提供了全面而深入的教程,帮助读者掌握这些关键概念。 首先,我们来了解一下数据结构。数据结构是组织和存储数据的方式,以便于高效地访问和修改。常见的数据...
《数据结构与算法分析_Java语言描述(第2版) 源代码》是一本深入探讨数据结构和算法的书籍,其源代码是学习和理解书中理论的重要实践资源。这本书籍主要面向计算机科学专业的学生以及对算法有深入研究需求的开发者。...
本资源“Java语言描述(算法)”旨在深入解析Java语言中的算法实现,帮助读者提升编程技巧和解决问题的能力。 目录通常会包含以下部分: 1. **基础篇**:涵盖Java语言的基础语法,如变量、数据类型、运算符、控制...
在这个“数据结构与算法--Java语言描述”的资料中,我们有望深入理解这些核心概念,并通过Java语言来实现它们,从而提升编程技能。 数据结构是组织和存储数据的方式,它决定了数据的访问效率和操作复杂性。常见的...
### 数据结构与算法分析——Java语言描述课后习题答案 #### 一、背景介绍 这本书作为《数据结构与算法分析》第二版的配套解决方案手册,由Addison-Wesley出版社出版。主要针对使用Java编程语言的学生和专业人士。...
在《数据结构与算法分析:Java语言描述》一书中,作者深入探讨了这一领域的关键概念和技术,并通过Java编程语言进行了具体的实现和演示。 ### 数据结构 数据结构是指在计算机中存储、组织数据的方式,它不仅影响到...
在这本《数据结构与算法分析JAVA语言描述》中,我们将深入探讨如何使用Java语言来实现和优化这些关键概念。 1. **数组**:作为最基础的数据结构,数组允许我们在固定位置存储相同类型的元素。Java中的数组支持一维...
本资源包含两本书——《数据结构与算法分析(Java语言描述)》的中文第二版以及对应的习题答案,无论是英文还是中文版本,都是Java开发者深入理解这一领域的宝贵资料。 《数据结构与算法分析》一书,作者通常会详细...
《数据结构与算法分析——Java语言描述》第三版是一本深度探讨数据结构和算法的经典教材。作者通过使用Java编程语言,详细阐述了各种关键数据结构(如数组、链表、队列、栈、树、图等)的设计与实现,以及算法(排序...
《数据结构和算法JAVA语言描述》是一本专为学习数据结构和算法的读者精心编写的教材,由三峡大学理学院的周鹏教授撰写。这本书深入浅出地介绍了数据结构和算法的基本概念,以及如何用JAVA这门强大的编程语言来实现...
《数据结构与算法分析-java语言描述(第二版)》这本书是专门针对Java语言使用者设计的,旨在深入讲解数据结构和算法的知识,并以Java语言作为实现这些概念的工具。本书不仅适合于计算机科学相关专业的学生,也适合...
《数据结构与算法经典问题解析 Java语言描述》第二版是一本深入探讨计算机科学核心领域的书籍,专注于使用Java语言来阐述和解决数据结构和算法的问题。这本书对于任何希望在IT行业中提升自身技能,尤其是软件开发...
这些知识点在《数据结构与算法》Java语言描述源代码中应该都有相应的实现,通过阅读和实践这些源代码,可以加深对数据结构和算法的理解,提高编程能力。同时,理解这些概念对于解决实际问题和开发高性能的软件系统至...
数据结构与算法分析是计算机科学的核心领域,Java作为一种流行的编程语言,被广泛用于实现各种数据结构和算法。这里提到的源代码集包含了多个经典的数据结构和算法实现,如排序算法、字典树、堆、平衡二叉树以及哈希...