One.最牛逼的归并排序
#include <iostream>
using namespace std;
void mergeArr(int arr[], int low, int mid, int hight)
{
int* tempArr = new int[hight - low + 1];
int i = low, j = mid + 1, k = 0;
while (i <= mid && j <= hight)
{
if (arr[i] < arr[j])
{
tempArr[k] = arr[i];
i++;
}
else
{
tempArr[k] = arr[j];
j++;
}
k++;
}
while (i <= mid)
{
tempArr[k] = arr[i];
i++;
k++;
}
while (j <= hight)
{
tempArr[k] = arr[j];
j++;
k++;
}
i = low;
for (int tempK = 0;((tempK < k)&&(i<=hight));tempK++)
{
arr[i] = tempArr[tempK];
i++;
}
delete[] tempArr;
tempArr = NULL;
}
void sortArr(int arr[], int low, int hight)
{
if (low < hight)
{
int mid = (hight + low) / 2;
sortArr(arr,low,mid);
sortArr(arr, mid + 1, hight);
mergeArr(arr, low, mid, hight);
}
}
int main()
{
long long m;
int arr[2000000]={0};
cin >>m;
for (long long j = 0;j < m;j++)
{
cin>>arr[j];
}
sortArr(arr,0,m);
for (int j = 1;j <=m;j++)
{
cout << arr[j] << " ";
}
return 0;
}
Two.利用库函数STL快速排序SORT
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10];
for(int i=0;i<10;i++)
{
cin>>a[i];
}
sort(a,a+10);
for(int i=0;i<10;i++)
{
cout<<a[i];
}
return 0;
}
Three.桶排序
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x;
cin>>n;
int sum(0),b[1002];
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)
{
cin>>x;
if(b[x])
continue;
b[x]++;
sum++;
}
cout<<sum<<endl;
for(int i=1;i<=1000;i++)
if(b[i])
cout<<i<<' ';
cout<<endl;
return 0;
}
Four.冒泡排序
时间复杂度最大,最简单的排序
void bubblesort(int *arr,int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n-i-1; j++)
{
if(arr[j]>arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
Five.插入排序
void insertSort(ElemType array[], int n){
cout << endl << "Direct insertion sort (from small to large)" << endl;
int count_sort = 0, count_move = 0;
int i, j, temp;
for(i = 1; i < n; i++){
temp = array[i];
for(j = i - 1; temp < array[j]; j--){
array[j + 1] = array[j];
count_move ++;
count_sort ++;
if(j == -1){
break;
}
}
array[j + 1] = temp;
}
printMatrix(array, n);
cout << "Number of data comparisons: " << count_sort << endl;
cout << "Number of data moves: " << count_move << endl;
}
Six.快速排序
void swap(int *x,int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int partition(int *a,int left ,int right)
{
int j = left;
int i = j-1;
int key = a[right];
for (; j < right; ++j)
{
if(a[j] <= key)
swap(&a[j], &a[++i]);
}
swap(&a[right], &a[++i]);
return i;
}
void quicksort(int *a,int left ,int right)
{
if(left >= right)
return;
int mid = partition(a,left,right);
quicksort(a,left,mid-1);
quicksort(a,mid+1,right);
}
Seven.选择排序
void selectsort(int *a ,int n)
{
for (int i = 0; i < n; i++)
{
int key = i;
for (int j = i+1; j < n; j++)
{
if(a[j]<a[key])
key =j;
}
if(key !=i)
{
int temp = a[key];
a[key] = a[i];
a[i] =temp;
}
}
}