基礎演算法——排序與查詢
阿新 • • 發佈:2018-12-18
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的位置