所謂「氣泡排序」,可以從名稱上理解:
以從小到大來舉例,「冒泡」實際上就是指把值更大的元素放到數列的後面(如果是從大到小排列,則反之),通過交換來實現。
我們先來大致地看下面的**,感受一下氣泡排序的執行過程:
//氣泡排序
#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...