#include <iostream>
#include<algorithm>
#include <memory>
#include<vector>
#include<cmath>
#include<queue>
#include<utility>
using namespace std;
// Swap
void bubbleSort(int arr[], int n) {
for(int i=0;i<n;i++){
int flag = false;
for(int j=0;j<n-i-1;j++){
if(arr[j] > arr[j+1]){
int num = arr[j];
arr[j] = arr[j+1];
arr[j+1] = num;
flag = true;
}
}
if(flag) break;
}
}
void quickSort(int arr[], int left, int right) {
if(left<right) {
int pivot = arr[left];
int i = left;
int j = right;
while(i<j) {
while(i<j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while(i<j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quickSort(arr, i+1, right);
quickSort(arr, left, i-1);
}
}
// Insert
void insertSort(int arr[], int n) {
for(int i=1;i<n;i++) {
if(arr[i] < arr[i-1]) {
int temp = arr[i];
int j;
for(j=i-1; j>=0;j--){
if(arr[j] > temp){
arr[j+1] = arr[j];
} else {
break;
}
}
arr[j+1] = temp;
}
}
}
void shellSort(int arr[], int n) {
for(int d = n/2; d>=1; d/=2){
for(int i = d; i<n; i++) {
int temp = arr[i];
int j;
for(j = i-d; j>=0 && arr[j]>temp; j-=d) {
arr[j+d] = arr[j];
}
arr[j+d] = temp;
}
// for(int k=0;k<4;k++)
// cout<<arr[k]<<" ";
// cout<<endl;
}
}
// Select
void selectSort(int arr[], int n) {
for(int i=-1; i<n-1; i++) {
int j;
int index = i+1;
for(j=i+1;j<n;j++) {
if(arr[index] > arr[j]){
index = j;
}
}
int temp = arr[i+1];
arr[i+1] = arr[index];
arr[index] = temp;
}
}
void maxHeap(int arr[], int n, int index) {
int left = index*2+1;
int right = index*2+2;
int largest = index;
if(left < n && arr[left] > arr[largest]) {
largest = left;
}
if(right < n && arr[right] > arr[largest]) {
largest = right;
}
if(largest != index) {
int temp = arr[index];
arr[index] = arr[largest];
arr[largest] = temp;
maxHeap(arr,n,largest);
}
}
void heapSort(int arr[], int n) {
// build Max heap
for(int i=(n-1-1)/2; i>=0; i--) {
maxHeap(arr,n,i);
}
for(int i=n-1; i>0; i--) {
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
maxHeap(arr,i,0);
}
}
void merge(int arr[], int left, int middle, int right) {
int i = left;
// int middle = (left+right)/2;
int j = middle+1;
int* temp = new int(right-left+1);
int k=0;
while(i <= middle && j <= right) {
if(arr[i] < arr[j]){
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while(i <= middle) {
temp[k++] = arr[i++];
}
while(j <= right) {
temp[k++] = arr[j++];
}
for(int q=0; q<k; q++){
arr[q+left] = temp[q];
}
}
void mergeSort(int arr[], int left, int right){
int middle = (left+right)/2;
if(left < right) {
mergeSort(arr, left, middle);
mergeSort(arr, middle+1, right);
merge(arr, left, middle, right);
}
}
int main()
{
int arr[4] = {8,2,5,1};
int n = 4;
int s = 0;
// bubbleSort(arr,4);
// quickSort(arr, 0, n-1);
// insertSort(arr,n);
// shellSort(arr,n);
// selectSort(arr,n);
// heapSort(arr,n);
mergeSort(arr,0,n-1);
for(int i=0;i<4;i++){
cout<<arr[i]<<endl;
}
}
C++ 实现七种排序算法
最新推荐文章于 2024-07-15 13:32:43 发布