直通BAT-排序1(冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序)
2018-01-09 14:55
886 查看
时间复杂度为O(N^2)的排序算法
冒泡排序:
选择排序
插入排序
时间复杂度为O(N*logN)的排序算法
归并排序
快速排序
堆排序
希尔排序
冒泡排序:
import java.util.*; public class BubbleSort { public int[] bubbleSort(int[] A, int n) { // write code here int temp; for(int i = n - 1; i >= 0; i--) { for(int j = 0; j < i; j++) { if(A[j] > A[j + 1]) { temp = A[j]; A[j] = A[j + 1]; A[j + 1] = temp; } } } return A; } }
选择排序
import java.util.*; public class SelectionSort { public int[] selectionSort(int[] A, int n) { // write code here int temp; for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) { if(A[j] < A[i]) { temp = A[i]; A[i] = A[j]; A[j] = temp; } } } return A; } }
插入排序
import java.util.*; public class InsertionSort { public int[] insertionSort(int[] A, int n) { // write code here int temp; for(int i = 0; i < n; i++) { for(int j = 0; j < i; j++) { if(A[i] < A[j]) { temp = A[i]; A[i] = A[j]; A[j] = temp; } } } return A; } }
时间复杂度为O(N*logN)的排序算法
归并排序
import java.util.*; public class MergeSort { public int[] mergeSort(int[] A, int n) { // write code here if(A == null || n < 2) { return A; } process(A, 0, n - 1); return A; } public static void process(int[] A, int left, int right) { if(left == right) { return; } int mid = (left + right) / 2; process(A, left, mid); process(A, mid + 1, right); merge(A, left, mid, right); } public static void merge(int[] A, int left, int mid, int right) { int[] help = new int[right - left + 1]; int l = left; int r = mid + 1; int index = 0; while (l <= mid && r <= right) { if (A[l] <= A[r]) { help[index++] = A[l++]; } else { help[index++] = A[r++]; } } while (l <= mid) { help[index++] = A[l++]; } while (r <= right) { help[index++] = A[r++]; } for (int i = 0; i < help.length; i++) { A[left + i] = help[i]; } } }
快速排序
import java.util.*; public class QuickSort { public int[] quickSort(int[] A, int n) { // write code here if(A == null || n < 2) { return A; } process(A, 0, n - 1); return A; } public static void process(int[] A, int left, int right) { if(left < right) { int random = left + (int)(Math.random() * (right - left + 1)); swap(A, random, right); int mid = partition(A, left, right); process(A, left, mid - 1); process(A, mid + 1, right); } } public static int partition(int[] A, int left, int right) { int pivot = left - 1; int index = left; while (index <= right) { if (A[index] <= A[right]) { swap(A, ++pivot, index); } index++; } return pivot; } public static void swap(int[] A, int index1, int index2) { int tmp = A[index1]; A[index1] = A[index2]; A[index2] = tmp; } }
堆排序
import java.util.*; public class HeapSort { public int[] heapSort(int[] A, int n) { // write code here for(int i=n/2; i>=0; i--){ heapAdjust(A,i,n); } for(int i=n-1;i>0;i--){ swap(A,0,i); heapAdjust(A,0,i); } return A; } void heapAdjust(int[] A,int index,int length){ int childLeft; int temp = A[index]; for( ;index*2+1 < length;index = childLeft){ childLeft = index*2+1; if(childLeft !=length-1 && A[childLeft] < A[childLeft+1]){ childLeft++; } if(temp > A[childLeft]){ break; } else { A[index] = A[childLeft]; index = childLeft; } } A[index] = temp; } static void swap(int[] A,int m,int n){ int temp = A[m]; A[m] = A ; A = temp; } }
希尔排序
import java.util.*; public class ShellSort { public int[] shellSort(int[] A, int n) { if(A == null || n < 2) { return A; } int feet = n / 2; int index = 0; while(feet > 0){ for(int i = feet; i < n; i++) { index = i; while(index >= feet) { if(A[index - feet] > A[index]) { swap(A, index - feet, index); index -= feet; } else { break; } } } feet /= 2; } return A; } public static void swap(int[] A, int index1, int index2) { int temp = A[index1]; A[index1] = A[index2]; A[index2] = temp; } }
相关文章推荐
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序
- 常用的排序算法(快速排序、插入排序、希尔排序、堆排序、冒泡排序、选择排序、归并排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 冒泡排序,插入排序,快速排序,归并排序,堆排序,选择排序,希尔排序
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
- 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 排序方法了解一下(冒泡排序、选择排序、堆排序、插入排序、希尔排序、归并排序、快速排序、基数排序)
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 基本的排序算法:冒泡排序、插入排序、希尔排序、选择排序、归并排序、快速排序、堆排序
- 各种排序算法总结----基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 数据结构与算法从零开始系列:冒泡排序、选择排序、插入排序、希尔排序、堆排序、快速排序、归并排序、基数排序
- 几种基本排序的实现:选择排序,冒泡排序,插入排序,堆排序,快速排序,归并排序