資料結構之排序

2021-08-19 18:42:19 字數 2086 閱讀 8259

目錄

氣泡排序

選擇排序

插入排序

shell排序

歸併排序

快速排序

堆排序

void bubblesort(int arr,int _size)}}

}

/*

每一輪迴圈都把最小的數放在陣列的前半部分

*/void selectsort(int arr, int _size)

}if (arr[min] != arr[i])//如果min已被更新

}}

/*

插入排序

1.從第二個元素開始,標記該元素

2.逐個與前面的數比較

3.最後再把標記的元素放入合適位置

時間複雜度o(n^2)

*/

void insertionsort(int arr, int _size)

arr[j + 1] = key;

}}

1.先定好步長step * 3 + 1

2.以當前步長逐個向後比較

3.縮步長

void shellsort(int arr, int _size)

while (step>0)

//當把步長內大於key的全部元素放到後面,再安置key

arr[j + step] = key;

}step = (step - 1) / 3;//一輪挪完後

}}

1.定義乙個第三方

2.一邊從起始位置開始,一邊從中間開始,比較小的先加入第三方

3.如果陣列個數為奇數,看最後哪一方還剩下乙個

4.把剩下的加進去

void merge(int arr, int start, int end, int mid)

while (i <= mid)//如果j先結束

while (j <= end)//如果i先結束

for (i = 0; i < len; i++)

}//遞迴

void mergesortrecur(int arr, int start,int end)

int mid = (start + end) >> 1;

mergesortrecur(arr, start, mid);

mergesortrecur(arr, mid+1, end);

merge(arr, start, end, mid);

}//非遞迴

void mergesortiter(int arr, int size)

}}

void quicksort(int arr, int start, int right)//先全體找出index

int index = arr[start];//將最左邊的數作為基準值,這點要求了必須從右邊開始

int i = start;

int j = right;

while (i != j)       

while (arr[i] <= index&&i < j)

if (iarr[max])//找較大的子節點

if (right < size&&arr[right]>arr[max])//找較大的子節點

if (max != index)

}void adjustdown(int arr, int index, int size)

if (arr[index] < arr[child])//因為是從底層往上把那個較小值上調的,所以這時候的index往下之

前已經調整過了

swap(&arr[index], &arr[child]);//走到這裡說明沒有進入上乙個if,此時的根節點比子節點大

index = child;//子節點做根節點繼續往下調整

child = index * 2 + 1;

}}void makeheap(int arr, int size)//建堆

}void heapsort(int arr, int size)

}

資料結構之排序

在待排序的檔案中,若存在多個關鍵字相同的記錄,經過排序後這些具有相同關鍵字的記錄之間的相對次序保持不變,該排序方法是穩定的 若具有相同關鍵字的記錄之間的相對次序發生變化,則稱這種排序方法是不穩定的。穩定的排序 時間複雜度 空間複雜度 氣泡排序 最差和平均是o n2 最好是o n 1 雙向氣泡排序 最...

資料結構之排序

package com.small 注意a 0 是否有意思,書上c語言基本都是將a 0 作為哨兵,那麼0號元素不能用,我這裡全部是flag代替 author small leaf public class sort else for j i 1 j high 1 j a high 1 flag 希爾...

資料結構之排序

常用的幾種排序方法 冒泡 插入 選擇 快排 歸併排序 1 冒泡 以公升序為例,也是有兩種思路,1 num 0 依次與後面比較將最小的放到第一位 2 將最大的放到最後一位。我比較習慣用第一種 1 include include using namespace std int main for int ...