氣泡排序和快速排序

2021-09-20 21:55:17 字數 2457 閱讀 2176

氣泡排序和快速排序都是以交換位置為基礎的排序,快速排序是對氣泡排序的改進。

氣泡排序:交換相鄰兩個元素

話不多說直接上**:

void bubble_sort(sqlist *l)

/*氣泡排序*/

}}

快速排序

快速排序,氣泡排序的一種改進,主要分為幾個步驟:

選主元:一般取頭、中、尾的中位數

劃分子集:使用兩個指標從兩頭遍歷,大於主元的放一邊,小於主元的放一邊

這樣一趟快排序就將原來的無序序列分成了兩個有序序列,交換一次可以消除多個逆序對經過一次排序,主元的位置就已經確定。

elementtype medain3(sqlist *l,int left, int right)

/*選主元,找頭、中、尾的中位數*/

void quicksort(sqlist *l,int left, int right)

/*快速排序*/

//如果小於pivot,i 就往前走,大於pivot時停下來

while (l->data[--j] > pivot) {}// 如果小於pivot, j就往前走,小於pivot時停下來

if (i < j)//如果此時i還在j前面

swap(&l->data[i], &l->data[j]);

else

break;

} swap(&l->data[i], &l->data[right - 1]);

quicksort(l, left, i - 1);

quicksort(l, i + 1, right); }}

void quick_sort(sqlist *l)

/*統一函式介面*/

完整的示例**:

// swap_sort.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

//#include "pch.h"

#include #include#include#define maxsize 100

typedef int elementtype;

typedef struct

sqlist;

void swap(elementtype *a, elementtype *b)

void bubble_sort(sqlist *l)

/*氣泡排序*/ }}

elementtype medain3(sqlist *l,int left, int right)

/*選主元,找頭、中、尾的中位數*/

void quicksort(sqlist *l,int left, int right)

/*快速排序,氣泡排序的一種改進,主要分為幾個步驟:

選主元:一般取頭、中、尾的中位數

劃分子集:使用兩個指標從兩頭遍歷,大於主元的放一邊,小於主元的放一邊

這樣一趟快排序就將原來的無序序列分成了兩個有序序列,交換一次可以消除多個逆序對

經過一次排序,主元的位置就已經確定

*/ //如果小於pivot,i 就往前走,大於pivot時停下來

while (l->data[--j] > pivot) {}// 如果小於pivot, j就往前走,小於pivot時停下來

if (i < j)//如果此時i還在j前面

swap(&l->data[i], &l->data[j]);

else

break;

} swap(&l->data[i], &l->data[right - 1]);

quicksort(l, left, i - 1);

quicksort(l, i + 1, right); }}

void quick_sort(sqlist *l)

/*統一函式介面*/

void displaysqlist(sqlist l)

/*列印序列*/

printf("\n");

}int main()

; int len = sizeof(a) / sizeof(a[0]);

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

l.length = len;

l1 = l;

printf("排序前:");

displaysqlist(l);

printf("氣泡排序:");

bubble_sort(&l);

displaysqlist(l);

printf("快速排序:");

排序 氣泡排序和快速排序

實現思路 把第乙個元素作為標記,依次判斷後續的值,如果小於它則放在左邊,如果大於它則放右邊,同理把左右兩部分看成乙個整體一直遞迴,最後再陣列拼接起來 它的最優時間複雜度為o nlogn 以標記元素為中心,正好每次左右都能均勻分配 最糟糕時間複雜度為o n 2 標記元素每次是最大或最小值,使所有數都劃...

氣泡排序和快速排序

來自 氣泡排序1 自創的,不知道它叫什麼排序,和冒泡差不多。public void risepot ref int array 氣泡排序2 public void risepot ref int array 快速排序 public void quicksort ref int arr,int low...

氣泡排序和快速排序

pragma mark pragma mark 氣泡排序 選擇排序 void swap int a,int b void bubblesort int a,int length 簡單優化,對於已經有序的序列,省去接下的迴圈。對於這種優化,實際還需考慮,多了賦值和判斷操作。if temp length...