排序 演算法篇

2021-09-29 05:55:29 字數 2378 閱讀 5099

目錄

堆排序歸併排序:

氣泡排序 ——> 快速排序:

氣泡排序:

/** 構建最小堆 */

public static void makeminheap(int a, int n)

} // 從i節點開始調整,n為節點總數 從0開始計算 i節點的子節點為 2*i+1, 2*i+2

public static void minheapfixdown(int a, int i, int n)

if (a[i] <= a[j])

break;

// 較大節點下移

temp = a[i];

a[i] = a[j];

a[j] = temp;

i = j;

j = 2 * i + 1;

} }public static void minheap_sort(int a, int n)

}

* 歸併排序的核心是兩步:

* 1、把陣列分割成左右子樹,遞迴,直到不能在分割為止;

* 2、從最小子樹 依次往上 逐層合併

public static void main(string args) ;

int temp = new int[8];

print("【原始陣列】", arr);

merge_sort(arr, 0, arr.length-1, temp);

print("【歸併排序】", temp);

} /**

* 遞迴 將陣列分割成左右子樹

* @param array

* @param first

* @param last

* @param temp

*/public static void merge_sort(int array, int first, int last, int temp) }

/*** 合併 :將兩個序列a[first-middle],a[middle+1-end]合併

* @param array 原始陣列

* @param temp 臨時儲存排序成功的子陣列,然後將子陣列賦值給原始陣列對應的部分

*/public static void mergearray(int array, int first, int middle, int last, int temp) else

} while (begin <= point)

while (step <= end)

for (int ii = 0; ii < temp_index; ii++)

}

快速排序——冒泡(交換)排序的改進——挖坑填空

隨機取乙個數作為key,將比key大的數放在右邊,比key小的數放在左邊

分成左右子陣列    依次遞迴

public static void quicksort(int  arr,int left,int right)

int key = arr[left]; //選擇第乙個數為key

int lindex = left; //記錄左移動的下標

int rindex = right; //記錄右移動的下標

while(lindex < rindex)

if(lindex < rindex)

while(lindex < rindex && arr[lindex] < key)

if(lindex < rindex)

}arr[lindex] = key;

quicksort(arr, left, lindex-1);//遞迴呼叫

quicksort(arr, lindex+1, right);//遞迴呼叫

}

/**

* 氣泡排序

* 思想:兩個數比較大小,較大的數下沉(往後),較小的數冒起來(往前)。

*/方法一:

public static int bubblesort(int arr)

}if(!flag)

} return arr;

}方法二:

// 複雜度 0.5*n(n+1)

// 二次函式,

public static int sort(int array)

}print(array);

} return array;

} public static void main(string args) ;

int a = bubblesort(asd);

for (int i = 0; i < a.length; i++)

}

排序演算法篇(氣泡排序)

氣泡排序 bubble sort 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。氣泡排序演算法的...

排序演算法篇(堆排序)

堆是一種特殊的資料結構,是一種完全二叉樹,分為大根堆 根節點的值大於孩子節點 和小根堆 根節點小於孩子節點 建堆和堆排序 如下 package cn.com.daydayup.test public class stacksort sort a 堆排需方法 public static void so...

演算法篇 選擇排序演算法

嘿嘿,不要怪我啦,別的都看不懂,就從最基本的開始講解!選擇排序演算法思想 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘的未排序的元素中繼續尋找最小 大 元素,然後放到已排序的末尾。直到所有元素均排序完畢。實現 對於乙個無序的序列我們可以通過n 1趟排序得到排序結果。...