排序(希尔、 堆 归并 快速)
来源:互联网 发布:杜兰特各赛季数据统计 编辑:程序博客网 时间:2024/05/01 10:17
排序(希尔排序 堆排序 归并 排序, 快速排序)
-------------------学习笔记
希尔排序:
int temp;int gab = num.length;do{gab = gab / 3 + 1;for (int i=gab; i <num.length; i++){temp = num[i];int j;for (j=i-gab; j>=0 && num[j] > temp; j-=gab){num[j+gab] = num[j];}num[j+gab] = temp;}}while (gab > 1);
堆排序:
public static void main(String[] args) {int num[] = new int[]{9,8,7,6,5,4,3,2,1};int length = num.length;for (int i=length/2; i>=0; i--){HeapAdjust(num, i, length);}for (int i=length-1; i>0; i--){swap(num, 0, i);HeapAdjust(num, 0, i);}//for (int num1 : num)//System.out.println(num1);}private static void swap(int num[], int x, int y){int temp = num[x];num[x] = num[y];num[y] = temp;}private static void HeapAdjust(int num[], int s, int m){int temp = num[s];for (int j=2*s+1; j<m; j=2*s+1){if (j <m-1 && num[j] < num[j+1])j++;if (num[j] < temp)break;num[s] = num[j];s = j;}num[s] = temp;}
归并排序:
public class mergeSort {int[] arr;private void merge(int low, int mid, int high){int[] temp = new int[high - low + 1];int i = low, j = mid+1;int k = 0;while (i <= mid && j <= high){if (arr[i] < arr[j]){temp[k++] = arr[i++];}else{temp[k++] = arr[j++];}}while (i <= mid){temp[k++] = arr[i++];}while (j <= high){temp[k++] = arr[j++];}for (i=0; i<=high-low; i++){arr[i+low] = temp[i];}}private void sort(int low, int high){int mid = (low + high) / 2;if (low < high){sort(low, mid);sort(mid+1, high);merge(low, mid, high);}return;}public mergeSort(int[] arr1){arr = arr1;sort(0, arr.length-1);}}
快速排序:
public class QuickSort {private int[] arr;private void swap(int x, int y){int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}private void QuickSortRecursive(int start, int end){if (start >= end)return;int pivotkey = arr[end];int left = start;int right = end - 1;while (left < right){while(arr[left] < pivotkey && left < right)left++;while(arr[right] >= pivotkey && left < right)right--;swap(left, right);}if (arr[left] >= pivotkey)swap(left, end);elseleft++;QuickSortRecursive(start, left-1);QuickSortRecursive(left+1, end);}public void sort(){QuickSortRecursive( 0, arr.length -1);}public QuickSort(int[] arr1){arr = arr1;}}
优化:
public class QuickSort {private int[] arr;private final int maxSize = 7; private void swap(int x, int y){int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}private void median(int start, int end ){int mid = (start - end) /2 + end;if (arr[start] > arr[end]){swap(start, end);if (arr[start] > arr[mid])swap(start, mid);if (arr[mid] < arr[end])swap(mid, end);}}private void insertSort(int start, int end){int temp, j;for (int i=start+1; i<=end; i++){temp = arr[i];for (j =i;j>start && arr[j-1] > temp; j--){arr[j] = arr[j-1];}arr[j] = temp;}}private void QuickSortRecursive(int start, int end){if (maxSize <(start - end)){median(start, end);int pivotkey = arr[end];int left = start;int right = end - 1;while (left < right){while(arr[left] < pivotkey && left < right)left++;while(arr[right] >= pivotkey && left < right)right--;swap(left, right);}if (arr[left] >= pivotkey)swap(left, end);elseleft++;QuickSortRecursive(start, left-1);QuickSortRecursive(left+1, end);}elseinsertSort(start, end);}public QuickSort(int[] arr1){arr = arr1;QuickSortRecursive( 0, arr.length -1);}}
0 0
- 排序(希尔、 堆 归并 快速)
- 排序(希尔排序,堆排序,归并排序,快速排序)
- 排序算法:希尔、归并、快速、堆排序
- 排序算法:希尔、归并、快速、堆排序
- 排序:插入,希尔,堆,快速,归并排序
- python写希尔、堆、快速、归并排序
- 插入排序、希尔排序、堆排序、归并排序、快速排序
- Java高级排序(希尔排序,快速排序,堆排序,归并排序,桶排序)
- 快速排序 归并排序 堆排序 希尔排序
- 快速排序 归并排序 堆排序 希尔排序
- 快速排序 归并排序 堆排序 希尔排序
- 各类排序算法实现(堆排序、希尔排序、快速排序、归并排序等)
- 插入 希尔 排序 堆排序 冒泡 快速 归并
- 【算法分析】排序算法:希尔、归并、快速、堆排序
- 【数据结构】排序算法:希尔、归并、快速、堆排序
- 【数据结构】排序算法:希尔、归并、快速、堆排序
- 【算法分析】排序算法:希尔、归并、快速、堆排序
- java---插入排序,冒泡,归并,快速,希尔,堆排序
- *[Lintcode]Trailing Zeros
- leetcode 75. Sort Colors
- SqlServer2012 ID自增需要插入指定值处理
- Scala光速入门笔记及作业(一)
- LeetCode *** 137. Single Number II
- 排序(希尔、 堆 归并 快速)
- Spring基础(一)——AOP&IoC
- windows DLL 被修改 案例分析
- hdoj5667 BestCoder Round #80 【费马小定理(膜拜)+矩阵快速幂+快速幂】
- mysql常见问答
- SMBIOS
- 病狗问题
- 第七周项目二友元类
- 一个简单的滑动门示例(附源码)