排序查詢演算法大總結

2021-08-03 06:40:12 字數 2791 閱讀 1211

溫故而知新,可以為師矣

「深入理解」—選擇排序演算法

「深入理解」—交換排序演算法

「深入理解」—插入排序演算法

「深入理解」—歸併排序演算法

二分查詢演算法

不對之處請各位指出,感謝。

import org.junit.test;

/** * 總結排序演算法:

* 氣泡排序、快速排序

* 直接插入排序、折半插入排序、希爾排序

* 選擇排序、堆排序

* 歸併排序

* 二分查詢演算法(遞迴、迭代)

* @author ywq

* **/public class solution ;

// for (int i : num)

// system.out.println();

bubblesort(num);

// quicksort(num, 0, num.length-1);

// insertsort(num);

// shellsort(num);

// halfinsertsort(num);

// selectsort(num);

// heapsort(num);

// mergesort(num, 0, num.length-1);

system.out.println(halfsearch2(num,0,num.length-1,3));

for (int i : num) }

/*** 從後往前的氣泡排序

* @param num

*/public void bubblesort(int num)

int i = left;

int j = right;

int temp = num[i];

//此處開始進入遍歷迴圈

while (i < j)

num[i] = num[j];

while (i < j && num[i] <= temp)

num[j] = num[i];

num[i] = temp; // 此處不可遺漏,將基準值插入到指定位置

}quicksort(num, left, i - 1);

quicksort(num, i + 1, right);

} /**

* 直接插入排序演算法

* @param num

*/public void insertsort(int num)

num[j+1] = temp; // 將num[i]放在指定位置

} }/**

* 希爾排序,分組的直接插入排序

* 多加了一成迴圈,增量d的初始值為陣列長度的一半

* @param num

*/public void shellsort(int num)

num[j+d] = temp;

}} }

/*** 折半插入排序:

* left = 0;

* right = i-1; 目標是將第i個元素插入到前面的某個位置,所以right為i-1

* @param num

*/public void halfinsertsort(int num)else if(num[mid]<=temp)

}// 經過上邊的迴圈,知道num[i]應該插入到left位置

int j ;

for (j = i-1; j >= left; j--)

num[left] = temp; // 將num[i]放在指定位置

} }

/*** 選擇排序:外層迴圈控制著趟數,每趟的num[i]我們認為是最小值

* @param num

*/public void selectsort(int num)

}} }

/*** 堆排序:

* 1、構建大頂堆

* 2、交換堆頂和末尾元素

* 3、繼續構建大頂堆

* @param num

*/public void heapsort(int num)

// 取堆頂元素進行交換,重新構建大頂堆

for(int t = num.length-1;t>0;t--)

} /**

* 交換陣列中的兩個位置的元素

* @param num

* @param i

* @param t

*/private void swap(int num, int i, int t)

/*** 構建大頂堆的方法

* s 代表擁有左右孩子節點的節點,即本次要調整位置的節點

* length 代表當前堆的長度

* @param num

* @param s

* @param length

*/private void getmaxheap(int num, int s, int length)

num[s] = temp; // 將temp放在指定位置 }

/*** 歸併排序:

* 將兩個(或兩個以上)有序表合併成乙個新的有序表 即把待排序序列分為若干個子串行,

* 每個子串行是有序的。然後再把有序子串行合併為整體有序序列

* @param num

* @param left

* @param right

*/public void mergesort(int num,int left,int right)

return -1;

}}

排序演算法大總結

思路 從最左邊的元素開始,逐個遍歷,找到這一趟中的最小值,存到minindex裡面,最後這一趟結束,將它和這一趟開始遍歷的位置i上的元素swap,直到最後乙個位置上也就位。相當於選擇出每一趟最小的元素,然後把它放到這一趟開始的地方。基礎版 void selectionsort int arr,int...

排序演算法 九大排序演算法總結

參考部落格 排序演算法 直接插入排序 時間複雜度 空間複雜度 o 1 穩定性 穩定 參考部落格 排序演算法 希爾排序 時間複雜度 空間複雜度 o 1 穩定性 不穩定 參考部落格 排序演算法 選擇排序 時間複雜度 空間複雜度 o 1 穩定性 不穩定 參考部落格 排序演算法 堆排序 時間複雜度 空間複雜...

排序演算法和查詢演算法總結

1.氣泡排序 解釋 所謂氣泡排序,就是如同水裡的泡泡一樣,將合適的值一次次往上冒,直到所有資料全部處理完成。在資料中的解釋就是 從第乙個數開始,每次都將前乙個數與後乙個數作比較,如果前乙個數大於後乙個數,則將兩者交換位置 否則不交換 此時,後乙個數值已變化,然後再將後乙個數與後後乙個數作比較,重複操...