八大經典排序 C 實現

2021-09-28 11:07:06 字數 4043 閱讀 7171

所謂「氣泡排序」,可以從名稱上理解:

以從小到大來舉例,「冒泡」實際上就是指把值更大的元素放到數列的後面(如果是從大到小排列,則反之),通過交換來實現。

我們先來大致地看下面的**,感受一下氣泡排序的執行過程:

//氣泡排序

#includeusing namespace std;

void bubblesort(int* arr, int n)

} }}int main()

; int num = sizeof(array) / sizeof(array[0]);

bubblesort(array, num);

//範圍for迴圈列印陣列

//雙向快速排序

#includeusing namespace std;

void quicksort(int* arr,int left, int right)

int i = left;

int j = right;

//最左邊的為準基數

int flag = arr[left];

while (i != j)

//從左側找到乙個比標記大的值

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

//交換找到的值,使左邊小,右邊大

int temp = 0;

if (i從第乙個元素開始,該元素已經排好序,繼續取元素與排好序的元素依次進行比較,公升序的話插入到比前乙個大比後乙個小的位置,然後重複上述步驟,直到插完元素為止.

#includeusing namespace std;

//元素集合接近有序時,直接插入排序效率較高.

//直接插入排序,順序查詢

void insertion_sort(int* arr, int n)

//插入元素

arr[left] = key; }}

int main()

; int size = sizeof(array) / sizeof(array[0]);

//insertion_sort(array, size);

insert_sort_second(array,size);

//範圍for迴圈列印陣列

for (auto e : array)

cout << endl;

return 0;

}

對整個待排序序列進行分組,然後對每一組進行直接插入排序.

//建堆

void heap_build(int array, int root, int length)

} if (array[root] < array[flag])

}}//堆排序

void heapsort(int array, int len)

for (int j = len - 1; j > 0; --j) }

int main()

; int size = sizeof(array) / sizeof(array[0]);

heapsort(array, size);

//範圍for迴圈遍歷列印陣列

for (auto e : array)

cout << endl;

return 0;

}

將待排序的元素序列分為兩個長度相等的子串行,對每個子串行進行排序,然後將他們合併成乙個序列,合併兩個子串行的過程稱為二路歸併.

//歸併排序

#include#includeusing namespace std;

//歸併

void mergedata(int *arr, int left, int mid, int right, int *temp)

}//遞迴

void mergesort(int *arr, int size)

_mergesort(arr, 0, size, temp);

free(temp);

}//非遞迴

void mergesort_nor(int *arr, int size)

int i = 0;

int gap = 1;

while (gapsize)

if (right>size)

mergedata(arr, left, mid, right, temp);

} memcpy(arr, temp, size*sizeof(arr[0]));

gap = gap * 2;

} free(temp);

}int main();

int size = sizeof(array) / sizeof(array[0]);

mergesort(array, size); //遞迴

//mergesort_nor(array, size); //非遞迴

for (auto e : array)

cout << endl;

return 0;

}

找到待排序列中最大最小的元素,然後以此確定臨時空間的大小,在臨時空間中,以待排序列組中元素的大小為下標,該元素出現的次數為該下標對應的元素,根據臨時空間的統計結果,重新對元素進行**.

//**,把temp裡的資料**到原空間裡

for (i = 0; i

free(temp);

}void count_sort(int *arr, int size)

//memset作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法

memset(temp, 0, ret*sizeof(int));

_count_sort(arr, temp, size, ret, min);

}int main();

int size = sizeof(array) / sizeof(array[0]);

count_sort(array, size);

for (auto e:array)

cout << endl;

return 0;

}

std中穩定排序演算法 八大經典排序演算法

一 插入排序 直接插入排序 straight insertion sort 直接插入排序 straight insertion sort 的基本思想是 把n個待排序的元素看成為乙個有序表和乙個無序表。開始時有序表中只包含1個元素,無序表中包含有n 1個元素,排序過程中每次從無序表中取出第乙個元素,將...

企業專案管理八大經典法寶

專案可大可小,大到乙個跨年度的工程,小到乙個辦公室裝修,對企業而言,都屬於專案管理的範疇。專案可不可行,專案可不可控,專案與企業發展戰略關聯多大,專案如何推進,專案實施驗收,專案預算與核算 等等,都是專案管理的內容。企業發展速度快,上專案速度和頻率也高,專案管理難度也隨之增加。上專案就意味著增加投入...

十大經典排序c

插入排序 選擇排序 歸併查詢 非比較類排序 通過比較來決定元素間的相對次序。不需要額外分配空間。思路1.第一層迴圈,n 1次迭代。兩個元素,只需對調一次,依次類推 2.第二層迴圈,兩兩比較 可以從左往右把最大值放到後面,也可以從右往左把最小值放到前面 void bubblesort vector i...