学java要算法吗_学习java不可不知的几种算法
1、冒泡排序算法:編程語言算法中比較經典的算法。每個程序員都必須了解和會運用的。
AAA軟件教育
程序算法基礎
通過多次比較(相鄰兩個數)和交換來實現排序:
public class bubble {
public static void bubbleSort(int[] a) {
int temp;
for (int i = 1; i < a.length; i++) {
//將相鄰兩個數進行比較,較大的數往后冒泡
for (int j = 0; j < a.length - i; j++) {
if (a[j] > a[j + 1]) {
//交換相鄰兩個數
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
public static void main(String[] args) {
int[] mao= {213,123,342,543,12,67,98,320,421,4,15,54,27,34,17};
System.out.print("排序前的數組為:\n"); //輸出排序前的數組
for(int i=0;i
{
System.out.print(mao[i]+" ");
}
System.out.print("\n");
bubbleSort(mao); //排序操作
System.out.print("排序后的數組為:\n");
for(int i=0;i
{
System.out.print(mao[i]+" "); //輸出排序后的數組
}
System.out.print("\n");
}
}
2、直接插入排序
通過對未排序的數據執行逐個插入至合適的位置而完成排序
public class straight{
public static void straightInsertion(int[] arr) {
int current;//要插入的數
//從1開始第一次一個數不需要排序
for (int i = 1; i < arr.length; i++) {
current = arr[i];
int j = i - 1; //序列元素個數
//從后往前循環,將大于當前插入數的向后移動
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j]; //元素向后移動
j--;
}
arr[j + 1] = current; //找到位置,插入當前元素
}
}
}
3、快速選擇排序
通過多次比較和交換來實現排序。首先設定一個分界值,將所有數值與分界值比較,左小右大,比較和交換數據值進而完成排序
public class quick{
static void quickSort(int[] arr,int left,int right) {
int f,t,rtemp,ltemp;
ltemp=left;
rtemp=right;
f=arr[(left+right)/2]; //分界值
while(ltemp
{
while(arr[ltemp]
{
++ltemp;
}
while(arr[rtemp]>f)
{
--rtemp;
}
if(ltemp<=rtemp)
{
t=arr[ltemp];
arr[ltemp]=arr[rtemp];
arr[rtemp]=t;
rtemp--;
ltemp++;
}
}
if(left
{
quickSort(arr,left,ltemp-1); //遞歸調用
}
if(ltemp
{
quickSort(arr,rtemp+1,right); //遞歸調用
}
}
}
4、希爾排序,又稱Shell排序或縮小增量排序
(1)將有n個元素的數組分成n/2個數字序列,第1個數據和第n/2+1個數據為一對。
(2)一次循環使每一個序列對排好順序。
(3)然后,再變為n/4個序列,再次排序。
(4)不斷重復上述過程,隨著序列減少最后變為一個,也就完成了整個排序。
代碼如下:public class shell{
static void shellSort(int[] a){
int h,temp,x=0;
for(int r=a.length/2;r>=1;r/= 2) //劃組排序
{
for(int i=r;i
{
temp=a[i];
int j=i-r;
while(j>=0 && temp
{
a[j+r]=a[j];
j-=r;
}
a[j+r]=temp;
}
x++;
}
}
}
5、堆排序:構造堆結構、堆排序輸出來實現排序
public class pratice {
public static void heapSort(int a[],int n)
{
int i,j,h,k;
int t;
for(i=n/2-1;i>=0;i--) //將a[0,n-1]建成大根堆
{
while(2*i+1
{
j=2*i+1 ;
if((j+1)
{
if(a[j]
總結
以上是生活随笔為你收集整理的学java要算法吗_学习java不可不知的几种算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python开两个守护线程_python
- 下一篇: 求一个数的阶乘值c语言代码,求10000