各種排序的總結
#include<iostream>
using namespace std;
//直接插入排序
void insertSort(int arr[] ,int size){
for(int i=1;i<size;i++){
int temp = arr[i];
int j = i-1;
while(j >= 0 && arr[j] > temp){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = temp;
}
}
//希爾排序
void shellSort(int arr[],int size){
int d = size/2;
while(d>=1){
for(int i=0;i<d;i++){
for(int j=i+d;j<size;j+=d){
int temp = arr[j];
int k = j-d;
while(k >= i && arr[k] > temp){
arr[k+d] = arr[k];
k -= d;
}
arr[k+d] = temp;
}
}
d = d/2;
}
}
//冒泡排序
void bubbleSort(int arr[], int size){
for(int i=0;i<size-1;i++){
for(int j=0;j<size-1-i;j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
//快排
void quickSort(int arr[], int l, int r){
int left = l,right = r;
int pivot = arr[left];
while(left < right){
while(left < right && arr[right] >= pivot )
right --;
arr[left] = arr[right];
while(left < right && arr[left] <= pivot)
left ++;
arr[right] = arr[left];
}
arr[left] = pivot;
if(left-1 > l)
quickSort(arr,l, left-1);
if(left+1 < r)
quickSort(arr,left+1,r);
}
//選擇排序
void selectSort(int arr[], int size){
for(int i=0;i<size-1;i++){
int min =i;
for(int j=i+1;j<size;j++){
if(arr[j] < arr[min])
min = j;
}
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
//堆排
void siftDown(int arr[], int i, int size){
int l = 2*i+1, r = 2*i+2;
int min = i;
if(l< size && arr[l] > arr[min])
min = l;
if(r<size && arr[r] > arr[min])
min = r;
if(i!= min){
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
siftDown(arr, min, size);
}
}
void heapSort(int arr[], int size){
int p = size/2 - 1;
for(int i=p;i>=0;i--)
siftDown(arr,i,size);
for(int i=size-1;i>=0;i--){
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
siftDown(arr,0,i);
}
}
//歸併排序
void merge(int arr[], int left, int mid, int right){
int * temp = new int[right-left+1];
int i = left, j = mid+1;
int k=0;
while(i <= mid && j <= right ){
if(arr[i] < arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while(i <= mid)
temp[k++] = arr[i++];
while(j <= right)
temp[k++] = arr[j++];
for(int i=0;i<right-left+1;i++)
arr[left+i] = temp[i];
delete [] temp;
}
void mergeSort(int arr[], int left, int right){
if(left < right){
int mid = (left+right)/2;
mergeSort(arr,left,mid);
mergeSort(arr,mid+1,right);
merge(arr,left,mid,right);
}
}
int main(){
int n;
cin >> n;
int* arr = new int[n];
for(int i=0;i<n;i++)
cin>>arr[i];
//quickSort(arr, 0, n-1);
mergeSort(arr, 0,n-1);
for(int i=0;i<n;i++)
cout<<arr[i]<<' ';
return 0;
}