穩定排序有 插入排序哦O(n^2) 冒泡排序O(n ^2) 歸併排序O(n log(n))
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
#define swap(a,b){\
a^=b;b^=a;a^=b;\
}
//插入
void insert_sort(int *num , int n){
for(int i = 1; i < n ;i++){
for(int j = i; j >0 && num[j] < num[j - 1]; --j){
swap(num[j], num[j - 1])
}
}
return ;
}
//冒泡
void bubble_sort(int *num ,int n){
int times = 1;
for(int i = 1; i < n ;i++){
times = 0;
for(int j = 0; j < n -i ; j++){
if(num[j] > num[j+1] ){
swap(num[j], num[j + 1]);
times++;
}
}
if(times == 0){
break;
}
}
}
//歸併排序
void merge_sort(int *num, int l, int r){
if(r - l <= 1){
if(r - l == 1 && num[l] > num[r]){
swap(num[l],num[r]);
}
return ;
}
int mid = (l + r)/2;
merge_sort(num, l , mid);
merge_sort(num, mid + 1 ,r);
int *temp =(int *) malloc(sizeof(int)*(r - l + 1));
int p1 = l, p2 = mid + 1,k = 0;
while(p1 <= mid || p2 <= r){
if(p2 > r || (p1 <= mid && num[p1] <= num[p2])){
temp[k++] = num[p1++];
}else{
temp[k++] = num[p2++];
}
}
memcpy(num + l, temp, sizeof(int) * (r - l + 1));
free(temp);
return ;
}
int main(){
int data[10]={4,3,2,1,4,6,5,4,3,6};
//insert_sort(data, 10);
// bubble_sort(data,10);
merge_sort(data,0,9);
for(int i = 0 ;i < 10; i++){
cout<<data[i]<<" ";
}
return 0;
}