演算法基礎 排序

2021-09-20 03:06:29 字數 3124 閱讀 6090

ps:以前沒有做過acm,在演算法這一塊吃了很大的虧,尤其是在今年的春招中所以痛定思痛,好好惡補一下演算法的知識。

今天寫演算法的基礎,排序演算法。

氣泡排序:每次把最大的數移到最後乙個

public static void bubblesort(int arr) 

for (int e = arr.length - 1; e > 0; e--)

}} }

public static void swap(int arr, int i, int j)

插入排序,將新進入的數插入已經有序的陣列裡

public static void insertionsort(int arr) 

for (int i = 1; i < arr.length; i++)

} }public static void swap(int arr, int i, int j)

選擇排序,將最小的數選出來,放在應該放置的位置

public static void selectionsort(int arr) 

for (int i = 0; i < arr.length - 1; i++)

swap(arr, i, minindex);

} }public static void swap(int arr, int i, int j)

堆排序,借助堆的特性

public static void heapsort(int arr) 

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

int size = arr.length;

swap(arr, 0, --size);

while (size > 0)

} // 向堆中插入乙個元素

public static void heapinsert(int arr, int index)

} // 調整堆

public static void heapify(int arr, int index, int size)

swap(arr, largest, index);

index = largest;

left = index * 2 + 1;

} }public static void swap(int arr, int i, int j)

桶排序

1,非基於比較的排序,與被排序的樣本的實際資料狀況很有關係,所 以實際中並不經常使用

2,時間複雜度o(n),額外空間複雜度o(n)

3,穩定的排序

// only for 0~200 value

public static void bucketsort(int arr)

int max = integer.min_value;

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

int bucket = new int[max + 1];

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

int i = 0;

for (int j = 0; j < bucket.length; j++)

} }

基數排序

// only for no-negative value

public static void radixsort(int arr)

radixsort(arr, 0, arr.length - 1, maxbits(arr));

} public static int maxbits(int arr)

int res = 0;

while (max != 0)

return res;

} public static void radixsort(int arr, int begin, int end, int digit)

for (i = begin; i <= end; i++)

for (i = 1; i < radix; i++)

for (i = end; i >= begin; i--)

for (i = begin, j = 0; i <= end; i++, j++)

} }public static int getdigit(int x, int d)

歸併排序:分治的過程

public static void mergesort(int arr) 

mergesort(arr, 0, arr.length - 1);

} public static void mergesort(int arr, int l, int r)

int mid = l + ((r - l) >> 1);

mergesort(arr, l, mid);

mergesort(arr, mid + 1, r);

merge(arr, l, mid, r);

} public static void merge(int arr, int l, int m, int r)

while (p1 <= m)

while (p2 <= r)

for (i = 0; i < help.length; i++)

}

快速排序,無法做到穩定性

public static void quicksort(int arr) 

quicksort(arr, 0, arr.length - 1);

} public static void quicksort(int arr, int l, int r)

} public static int partition(int arr, int l, int r) else if (arr[l] > arr[r]) else

} swap(arr, more, r);

return new int ;

} public static void swap(int arr, int i, int j)

演算法基礎 排序演算法

1.氣泡排序 原理有一列資料,從第乙個數開始,第乙個和第二個進行比較,如果第乙個大就交換,如果第二個大就不變,再第二個和第三個比較,一次類推,第二輪是從第乙個數開始比到倒數第二個數,第三輪是從第乙個數比到倒數第三個數.以此類推.def bubble nums for j in range len n...

基礎演算法 排序演算法

話不多說,上 include include include include include define n 10000500 long long beg intcnt,n void show time void swap int a,int b 稱這兩個函式為比較函式,函式名即相當於指標,將其寫...

基礎排序演算法

氣泡排序 最簡單,效率最差,實際工作中不推薦使用 private static void sort int list system.out.println 共交換 swap count 選擇排序 可看成是對於冒泡的改進版,減少了交換的次數 private static void sort int l...