1. 程式人生 > >基礎演算法——排序與查詢

基礎演算法——排序與查詢

1. 數字排序 1.1 演算法——冒泡演算法

//相鄰
public class BubbleSortDemo{
	public static void main(String []args){
		int[] ary={1,2,3,4,5,9,6,7,8};
		//遍歷,依次相鄰比較大小
		for(int i=0;i<ary.length-1;i++){
			for(int j=0;j<ary.length-i-1;i++){
				if(ary[j]>ary[j+1]){
				int y=ary[j];ary[j]=ary[j+i];ary[j+1]=t;
				}
			}
		}
		//列印排序後的陣列內容
		System.out.println("排序後的陣列:"+Arrays.toString(ary));
	}
}

排序後陣列:[1,2,3,4,5,6,7,8,9]

1.2 演算法——選擇排序

//跟第一個比
import java.util.Arrays;
public class SelectSortDome{
		public static void mian(String[] args){
			int[] ary = {1,2,3,4,5,9,6,7,8};
			for(int i=0;i<ary.length-1;i++){
				for(int j=i+1;j<ary.length;j++){
					if(ary[i]>ary[j]){
						int t=ary[i];ary[i]=ary[j];ary[j]=t;
					}
				}
			}
			//列印排序後的陣列內容
			System.out.println("排序後的陣列:"+Arrays.toString(ary));
		}
}

排序後陣列:[1,2,3,4,5,6,7,8,9]

1.3 演算法——插入排序

//前\後部分
import java.util.Arrays;
public static void mian (String[] args){
	int[] ary={1,2,3,4,5,9,6,7,8}
	int i,j,k;
	for(i=1;i<ary.length;i++){
		k=ary[i];//取出帶插入元素
		//找到插入位置
		for(j=i-1;j>=0&&k<ary[j];j--){
		ary[j+1]=ary[j];//移動元素
		}
		//插入元素
		ary[j+11]=k;
	}
	//列印排序後的陣列內容
	System.out.println("排序後的陣列:"+Arrays.toString(ary));
	}
}

排序後陣列:[1,2,3,4,5,6,7,8,9]

1.4 演算法——快速排序

//基準值遞迴呼叫
import java.util.Arrays;
public class QuickSortDemo{
	
	public static void maim(String[] args){
		int vec[]={77,88,66,100,10,55,55,99,9};
		QuickSortDemo q = new QuickSortDemo();
		q.quicksort(vec,0,vec.length-1);
		System.out.println("排序後的陣列:"+Arrays.toString(vec));
	}
	public void quicksort(int a[],int low,int high){//假設傳入low=0;high=a.l;
		
		if(low<high){
			int pivot,p_pos,i;//申明變數
			p_pos = low;//p_pos指向low,即位索引為0位置
			pivot = a[p_pos];//將0位置上的數值賦給pivot
			for(i=low+1;i<=high;i++){//迴圈次數,i=1
				if(a[i]>pivot){
				//1位置的數與0位置數作比較:a[1]>a[0]
					p_pos++;//2位與1位比較,3位與2位比較
					int tmp = a[p_pos];
					a[p_pos] = a[i];
					a[i] = tmp;
					
				}
				
			}
			int tmp = a[low];
			a[low] = a[p_pos];
			a[p_pos] = tmp;
			quicksort(a,low,p_pos-1);//遞迴呼叫,排序左半區
			quicksort(a,p_pos+1,high);//遞迴呼叫,排序右半區
		}
	}
		
}

排序後的陣列:[100,99,88,77,66,55,55,10,9] 

2. 查詢

2.1 演算法——順序查詢

//跟第一個比
import java.util.Arrays;
public class OrderFind{
	public static void main(String[] args){
		//定義一段陣列
		int[] ary = {1,2,3,4,5,6,9,7,8};
		//定義要查詢的資料
		int find = 5;
		//定義標識(示)符,即找到的位置
		int count=-1;
		for(int i=0;i<ary.length;i++){
			if(find == ary[i]){
				count = i;
			}
		}
		if(count != 1){
			System.out.println("下標在:"+count+"的位置");
		}else{
			System,out.println("對不起,沒有找到!");
		}
	}
}

下標在:3的位置 

2.2 演算法——二分查詢

//mid=(low+high)/2
import java.util.Arrays;
public class BinarySearchDemo{
	public static void main(String[] args){
		//定義一堆資料
		int[] a={1,2,3,4,5,6,9,7,8};
		//定義要查詢的資料
		int value = 5;
		//定義標識(示)符,即找到的位置
		int count = -1;
		int low = 0;
		int high = a.length-1;
		while(low<=high){
			int mid = (low+high)/2;
			if(a[mid] == value){
				count = mid;
				break;
			}else if(a[mid]>value){
			high = mid-1;
			
			}else{
			low = mid+1;
			
			}
		}if(count != -1){
			System,out.println("下標在:"+count+"位置");
		}else{
			System.out.println("沒有找到!");
		}
	}	
}

下標在:3的位置