資料結構和演算法 排序

2021-09-02 09:14:00 字數 2111 閱讀 4961

一、簡單排序

1.氣泡排序o(n^2)

兩兩比較,反序交換

public static int bubblesort(int arr) 

} }return arr;

}

2.選擇排序o(n^2)

public static int selectsort(int arr) 

}if(i != minindex)

} return arr;

}

3.插入排序

將乙個記錄插入到已經排好序的有序表中得到乙個新的、記錄增1的有序表

public static int insertsort(int arr) 

}// move

for (int k = i; k > index; k--)

arr[index] = sentinel;

}} return arr;

}

二、複雜排序

1.希爾排序o(n^(3/2))

增量序列最後乙個增量值必須等於1,初次取序列的一半為增量,以後每次減半,使序列基本有序,直到增量為1。

不實現了,在直接排序的基礎上增加了乙個增量,序列的增量比較。

2.堆排序o(nlogn)

是在選擇排序基礎上的改進,將序列構建成乙個大頂堆,將堆頂元素移走,再將剩下的元素重新構建乙個堆

堆:完全二叉樹,節點大於或等於其左右節點的值稱為大頂堆,小於或等於稱為小頂堆

public static int heapsort(int arr) 

for (int i = len - 1; i > 0; i--)

return arr; }

// 調整堆結構

public static int adjustheap(int arr, int curind, int len)

// 父節點與較大子節點比較

if (arr[curind] > arr[i-1])

arr[curind] = arr[curind] ^ arr[i-1];

arr[i - 1] = arr[curind] ^ arr[i-1];

arr[curind] = arr[curind] ^ arr[i-1];

curind = i - 1;

} arr[curind] = tmp;

return arr;

}

3.歸併排序

用遞迴和分而治之的技術將資料序列劃分成為越來越小的半子表,再對半子表排序,最後再用遞迴步驟將排好序的半子表合併成為越來越大的有序序列

public static int mergesort(int arr, int first, int last) 

return arr; }

public static void merge(int arr, int first, int mid, int last) else

index ++;

} while (indexl < mid)

while (indexr < last)

index = 0;

for (int i = first; i < last; i++)

}

4.快速排序o(nlogn)

經過一次排序分割成2部分,一部分大於另一部分

public static int quicksort(int arr, int low, int high) 

return arr;

} public static int partition(int arr, int low, int high)

swap(arr, low, high);

while (low < high && privotkey >= arr[low])

swap(arr, low, high);

} return low;

} public static void swap(int arr, int i1, int i2)

}

優化:隨機選取、三數取中

資料結構和演算法(排序)

排序 使乙個無序序列轉變為有序序列的過程 排序的穩定性 假設ki kj,1 i n,1 j n,i j 且在排序前的序列中ri領先於rj 即i如果排序後ri仍領先於rj,則稱所用的排序方法是穩定的,否則是不穩定的 影響排序演算法效能的幾個要素 時間效能,輔助空間 演算法的複雜性 氣泡排序 每次取相鄰...

資料結構和演算法 排序演算法 希爾排序

希爾排序 希爾排序 希爾排序就是插入排序的一種改進版本,演算法的步驟 把乙個序列不視為乙個整體,而是視為多個子串行,假設間隔是gap 4 alist 54,26,93,17,77,31,44,55,20 54,26,93,17,77,31,44,55,20 54 77 20 這是1 組,間隔是4,2...

資料結構和演算法 排序演算法 氣泡排序

排序演算法 排序演算法,我們想要把線性表中的無序序列,排成有序序列,的演算法,就是排序演算法,排序演算法的穩定性 舉例 假設對下面的元組要以他們的第乙個數字來排序。4,1 3,1 3,7 5,6 如果你排序之後,3,1 3,7 和原來的順序一樣,就是穩定的,否則就是不穩定的,3,1 3,7 4,1 ...