??xml version="1.0" encoding="utf-8" standalone="yes"?>
旉复杂度无非就是while循环的次敎ͼ
d有n个元素,
渐渐跟下d是n,n/2,n/4,....n/2^kQ其中k是循环的次?/span>
׃你n/2^k取整?gt;=1
即on/2^k=1
可得k=log2n,Q是?为底Qn的对敎ͼ
所以时间复杂度可以表示O()=O(logn)
快速排?nbsp;对冒泡排序的一U改q,若初始记录序列按关键字有序或基本有序Q蜕化ؓ冒排序。用的是递归原理Q在所有同数量UO(n longn) 的排序方法中Q其q_性能最好。就q_旉而言Q是目前被认为最好的一U?u>内部排序Ҏ
基本思想是:通过一w排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小Q然后再按此Ҏ对这两部分数据分别进行快速排序,整个排序q程可以递归q行Q以此达到整个数据变成有序序列?br /> 三个指针: W一个指针称为pivotkey指针Q枢_Q第二个指针和第三个指针分别为left指针和right指针Q分别指向最左边的值和最双的倹{left指针和right指针从两边同时向中间DQ在D的过E中不停的与枢u比较Q将比枢轴小的元素移C端,比枢u大的元素Ud高端Q枢轴选定后永q不变,最l在中间Q前后大?br />
需要两个函敎ͼ
① 递归函数 public static void quickSort(int[]n ,int left,int right)
② 分割函数Q一快速排序函敎ͼ public static int partition(int[]n ,int left,int right)
JAVA源代码(成功q行Q?/span>Q?br />
package com.abin.lee.algorithm.bubble;
public class BubbleSort {
public static void main(String[] args) {
int[] start={5,2,1,3,6,4};
int[] end=sort(start);
for(int i=0;i<end.length;i++){
System.out.println("end["+i+"]="+end[i]);
}
}
public static int[] sort(int[] input){
int temp=0;
}
package com.abin.lee.algorithm.select;
public class SelectSort {
public static void main(String[] args) {
int[] start={5,2,3,1,6,4};
start=sort(start);
for(int i=0;i<start.length;i++){
System.out.println("start["+i+"]="+start[i]);
}
}
public static int[] sort(int[] input){
int temp=0;
for(int i=0;i<input.length;i++){
for(int j=i+1;j<input.length;j++){
if(input[i]>input[j]){
temp=input[i];
input[i]=input[j];
input[j]=temp;
}
StringBuffer stb=new StringBuffer();
for(int k=0;k<input.length;k++){
stb.append("input["+k+"]="+input[k]+" ");
}
System.out.println("i="+i+",j="+j+" = "+stb.toString());
}
}
return input;
}
}
package com.abin.lee.photo;
public class TestInputNumber {
public static void main(String[] args) {
int n=4;
output(n);
}
public static void output(int n){
int temp=1;
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
System.out.print(temp+" ");
temp++;
}
System.out.println("");
}
}
}
4.二叉树算?br />
package com.abin.lee.algorithm.binary;
public class BinaryNode {
public int data;//根节?br /> BinaryNode left;//左节?br /> BinaryNode right;//双?br />
public BinaryNode(int data,BinaryNode left,BinaryNode right) {
this.data=data;
this.left=left;
this.right=right;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public BinaryNode getLeft() {
return left;
}
public void setLeft(BinaryNode left) {
this.left = left;
}
public BinaryNode getRight() {
return right;
}
public void setRight(BinaryNode right) {
this.right = right;
}
}
package com.abin.lee.algorithm.binary;
public class BinaryTree {
//前序遍历
public static void preOrder(BinaryNode root){
if(null!=root){
System.out.print(root.data+"-");
preOrder(root.left);
preOrder(root.right);
}
}
//中序遍历
public static void inOrder(BinaryNode root){
if(null!=root){
inOrder(root.left);
System.out.print(root.data+"--");
inOrder(root.right);
}
}
//后序遍历
public static void postOrder(BinaryNode root){
if(null!=root){
postOrder(root.left);
postOrder(root.right);
System.out.print(root.data+"---");
}
}
public static void main(String[] args) {
BinaryNode one=new BinaryNode(1,null,null);
BinaryNode three=new BinaryNode(3,null,null);
BinaryNode two=new BinaryNode(2,three,one);
BinaryNode four=new BinaryNode(4,one,two);
BinaryNode five=new BinaryNode(5,four,one);
System.out.println("preOrder");
preOrder(five);
System.out.println();
System.out.println("inOrder");
inOrder(five);
System.out.println();
System.out.println("postOrder");
postOrder(five);
System.out.println();
}
}
输出l果Q?br />preOrder
5-4-1-2-3-1-1-
inOrder
1--4--3--2--1--5--1--
postOrder
1---3---1---2---4---1---5---
5、java插入排序
插入式排序法——插入排序?/span>
插入排序QInsertion SortionQ的基本思想是:?/span>n个待排序的元素看成一个有序表和一个无序表Q开始有序表只包含一个元素,无序表中包含n-1个元素,排序q程中每ơ从无序表中取出W一个元素,把它的排序码依次与有序表元素的排序码q行比较Q将它插入到有序表中的适当位置Q之成为新的有序表?/span>
public class InjectionSort //定义一?InjectionSort c?br />public static void injectionSort(int[] number) //传数l?br />for(int j = 1;j<number.length;j++)//循环
int tmp = number[j]; //循环把数l第二个值放到tmp?br />int i = j-1//li 赋?br />while(tmp<number[i]) //tmp值和数组W一个值比较谁?br />number[i+1] = number[i]; //如果于把W一个D值给W二?br />i--;
if(i == -1)//如果i?-1
break; //退出@?br />number[i+1] = tmp //因ؓ比较数组里的前一个比后一个这样就换交了实C把小的放在前?br />q是W一ơ,因ؓ循环是一个数l,后边的就一ơ往下@环,最后就把数l里的顺序从到大排序了
public static void main(String[] args){
int[] num = {5,46,26,67,2,35};//定义数组num
injectionSort(num);//调用Ҏ
for(int i = 0;i<num.length;i++){
System.out.println(num[i]);//昄排序后的数组Q一行显CZ个?br />
单说是数组里第二个和第一个比谁小Q把的攑ֈW一个里Q大的放到第二个里,然后W二个再和第三个比,的q是攑֜前,一直比到这个数l结束,q样实C从小到大Q希望我说的够详l?/pre>
插入排序代码while循环Q?br />package com.abin.lee.algorithm.insert;public class InsertSort {public static void main(String[] args) {int[] input = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };input=sort(input);for (int i = 0; i < input.length; i++) {System.out.print(input[i] + " ");}}public static int[] sort(int[] input) {for (int i = 1; i < input.length; i++) {int insertVal = input[i];// insertValue准备和前一个数比较int index = i - 1;while (index >= 0 && insertVal < input[index]) {// 把input[index]向后Udinput[index + 1] = input[index];// 让index向前Ud一?/div>index--;}// insertValue插入到适当位置input[index + 1] = insertVal;//下面q个循环是ؓ了打C下中间的循环看看是不是插入排序的正确法StringBuffer stb=new StringBuffer();for(int k=0;k<input.length;k++){stb.append(input[k]+" ");}System.out.println("i="+i+" = "+stb.toString());}return input;}}
插入排序for循环代码Q?br />package com.abin.lee.algorithm.insert;public class DoInsertSort {public static void main(String[] args) {int[] input={5,4,6,3,7,2,8,1,0,9};input=sort(input);for(int i=0;i<input.length;i++){System.out.print("input["+i+"]="+input[i]+" ");}}public static int[] sort(int[] input){for(int i=1;i<input.length;i++){int temp=input[i];int j;for(j=i;j>0;j--){if(temp<input[j-1]){input[j]=input[j-1];}else{break;}}input[j]=temp;//下面q个循环是ؓ了打C下中间的循环看看是不是插入排序的正确法StringBuffer stb=new StringBuffer();for(int k=0;k<input.length;k++){stb.append(input[k]+" ");}System.out.println("i="+i+" = "+stb.toString());}return input;}}
二分查找又称折半查找Q它是一U效率较高的查找Ҏ?/p>
折半查找的算法思想是将数列按有序化(递增或递减)排列Q查找过E中采用跌式方式查找,卛_以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素Q则待查序列羃ؓ左半部分Q否则ؓ叛_部分。通过一ơ比较,查扑间羃一半?折半查找是一U高效的查找Ҏ。它可以明显减少比较ơ数Q提高查找效率。但是,折半查找的先x件是查找表中的数据元素必L序?/span>
package com.abin.algorithm.template.half;public class BinarySearch {public static void main(String[] args) {int[] src=new int[]{1,3,5,7,9,11};int result=binarySearch(src, 3);System.out.println("result="+result);int status=binarySearch(src, 9 ,0 ,src.length);System.out.println("status="+status);}//循环实现public static int binarySearch(int[] src,int key){int low=0;int high=src.length-1;while(low<=high){int middle=(low+high)/2;if(key==src[middle]){return middle;}else if(key<src[middle]){high=middle-1;}else{low=middle+1;}}return -1;}//递归实现public static int binarySearch(int[] src,int key,int low,int high){int middle=(low+high)/2;if(src[middle]==key){return middle;}else if(low>=high){return -1;}else if(src[middle]>key){return binarySearch(src, key, low, middle-1);}else if(src[middle]<key){return binarySearch(src, key, middle+1, high);}return -1;}}
]]> վ֩ģ壺 ¡| | ĺ| گ| | | | | 㰲| | ũ| | Ϫ| | Ҷ| | ī| ɽ| ƺ| Ҿ| ӡ| | | | | | | ߷| | | ˮ| ݳ| Ѩ| | | Զ| ˮ| | ۰| | |