演算法 排序(C 實現)

2021-09-12 04:05:47 字數 2364 閱讀 5637

1.氣泡排序

氣泡排序採用兩兩比較的方式。如果要由小到大排序,並且從前往後遍歷,那麼將大的往後放,第一重迴圈是比較幾輪,也就是陣列個數,第二重迴圈是從 0 到總數減去輪數。

// 氣泡排序

void mybubble(vector&values)}}

}

2.快速排序

快速排序就是選擇乙個基準資料,然後在陣列中 後前 依次判斷,如果是由小到大的,那麼大的應該在基準右側,小的在基準左側,所以找到不滿足的就交換位置。

注意:快速排序在遞迴時,必須判斷左側標誌否小於右側,否則遞迴無法退出

如果基準選擇的是最左側的資料,那麼就應該先從右側判斷,因為左側基準已經記錄的值,所以右側找到需要交換的資料可以賦值,否則會覆蓋掉陣列的值

在比較的時候必須用 <= 和 >= ,否則碰到兩個相同的資料就會陷入死迴圈。

// 快速排序

int partition(vector&values, int low, int high)

values[low] = values[high];

while (low < high && values[low] <= temp)

values[high] = values[low];

}values[low] = temp;

}return low;

}void quicksort(vector&values,int low, int high)

}

3.插入排序

遍歷元素,與前邊的元素比較,從小到大的話,如果需要前置,那麼將上乙個元素後移,直到找到合適位置,第二重迴圈的 j 可以看作指向 坑 在哪,將前邊的元素放進坑中。

// 插入排序

void insertsort(vector&values)

values[j] = temp;

}}

4.希爾排序

與直接插入排序相似,只不過比較不是逐個比較,而是有乙個增量,每次移動乙個增量。

// 希爾排序

void shellsort(vector&values)

values[j] = temp;}}

}}

5.選擇排序(擂台法)

依次遍歷陣列,由小到大是找到最小值並且記錄下標,然後交換數值

// 選擇排序

void selectsort(vector&values)

}values[n] = values[i];

values[i] = min;}}

}

6.堆排序

堆排序首先是建立乙個大頂堆,即所有的父節點都大於子節點的二叉樹,然後取出最大值:與最後乙個交換,將前邊的繼續建立大頂堆,然後繼續取最大的放到最後,直至結束。

建立大頂堆的演算法:因為初始陣列,只有前一部分有子節點,所以,從中間往前來建立,如果當前節點小於兩個子節點中最大的子節點,那麼就交換位置,然後繼續判斷在交換後的位置是否子節點仍然大於父節點,大於的話繼續交換,直至不再大於,就到下乙個父節點,從而建立成功。

// 堆排序

int leftchild(int i)

void swap(vector&values, int i, int j)

void createmaxheap(vector&values, int i, int length)

if (temp < values[child])

else

}values[i] = temp; //

}void heapsort(vector&values)

for (size_t i = values.size() - 1; i > 0 ; i--)

}

7.歸併排序

首先是 歸 即遞迴,遞迴來分治陣列,不斷的劃分陣列。

然後是 並 即合併,合併來排序。

所以可以先設計合併有序陣列的演算法,建立中間陣列來儲存合併後的資料。

然後遞迴呼叫即可。

// 歸併排序

void mergearray(vector&values, int left, int mid, int right, vector& temp_vec)

else

}// 左邊的沒有排完

while(i <= mid)

// 右邊的沒有排完

while (j <= right)

// 賦值

for (size_t m = 0; m < k; m++)

}void mergesort(vector&values, int left, int right)

}

排序演算法C 實現

整理一下排序演算法。首先乙個陣列,a 我們先要從大到小經行排序 1.按照人們最直觀的思想,應該是一次次的遍歷,每次從裡面取最大的乙個,放到另乙個陣列裡面,這就是簡單選擇排序。2.我們從第乙個值開始,跟其後面的值對比,如果後面的大,則與後面的交換。那麼每一次的結果就是最小被放到了最後,接著是第二小的唄...

C 實現排序演算法

資料結構中有六大經典的排序演算法,分別是氣泡排序 選擇排序 插入排序 歸併排序 快速排序和堆排序,以下是用c 實現的六大經典演算法的 1.氣泡排序 include include include using namespace std 一次氣泡排序 void bubble int arr,int s...

排序演算法 分配排序 C 實現

與之前的那些比較排序不同,分配排序在排序過程無須比較關鍵字,而是通過 分配 和 收集 過程來實現排序。它們的時間複雜度可達到線性階 o n 常見的分配排序有計數排序 counting sort 基數排序 radix sort 桶排序 bucket sort 美國旗幟排序 american flag ...