C++、JAVA实现十大排序
1.冒泡排序
2.插入排序
int main() {
int n;
cin>>n;
for(int i=0; i<n; i++) {
cin>>a[i];
}
for(int i=1; i<n; i++) {
int key =a[i];
int j=i-1;
while(j>=0 && key<a[j]) {
a[j+1]=a[j];
j--;
}
a[j+1] =key;
}
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
}
3.选择排序
4.希尔排序
#include<bits/stdc++.h>
using namespace std;
int a[1001000];
void shellSort(int n) {
int temp =0;
for(int gap = n/2; gap>0; gap/=2) {
for(int i=gap; i<n; i++) {
for(int j = i-gap; j>=0; j=j-gap) {
if(a[j]>a[j+gap]) {
swap(a[j],a[j+gap]);
}
}
}
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
cout<<endl;
}
}
void shellSort2(int n) {
int temp=0;
for(int gap = n/2; gap>0; gap =gap/2) {
for(int i=gap; i<n; i++) {
temp = a[i];
int j=i-gap;
if(a[j+gap]<a[j]) {
while(j>=0 && temp<a[j]) {
a[j+gap] = a[j];
j = j-gap;
}
a[j+gap] = temp;
}
}
}
}
int main() {
int n;
cin>>n;
for(int i=0; i<n; i++) {
cin>>a[i];
}
shellSort4(n);
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
}
5.归并排序
#include<bits/stdc++.h>
using namespace std;
int a[1001000];
int temp[1001000];
void merge(int left,int mid,int right,int temp[]) {
int i=left;
int j=mid+1;
int t=0;
while(i<=mid && j<=right) {
if(a[i]<=a[j]) {
temp[t]=a[i];
t++;
i++;
} else {
temp[t]=a[j];
t++;
j++;
}
}
while(i<=mid) {
temp[t]=a[i];
i++;
t++;
}
while(j<=right) {
temp[t]=a[j];
t++;
j++;
}
t=0;
int tempLeft = left;
while(tempLeft<=right) {
a[tempLeft] = temp[t];
t++;
tempLeft++;
}
}
void mergeSort(int left,int right,int temp[]) {
if(left<right) {
int mid = (left+right)/2;
mergeSort(left,mid,temp);
mergeSort(mid+1,right,temp);
merge(left,mid,right,temp);
}
}
int main() {
int n;
cin>>n;
for(int i=0; i<n; i++) {
cin>>a[i];
}
mergeSort(0,n-1,temp);
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
}
6.快速排序
#include<bits/stdc++.h>
using namespace std;
int a[1001000];
void qusort(int l,int r) {
int i = l;
int j = r;
if(i>j) {
return ;
}
int mid = (i+j)/2;
swap(a[mid],a[i]);
int point = a[i];
while(i<j) {
while(i<j && a[j]>point) {
j--;
}
if(i<j) {
a[i]=a[j];
i++;
}
while(i<j && a[i]<point) {
i++;
}
if(i<j) {
a[j]=a[i];
j--;
}
}
a[i]=point;
qusort(l,i-1);
qusort(j+1,r);
}
int main() {
int n;
cin>>n;
for(int i=0; i<n; i++) {
scanf("%d",&a[i]);
}
int len = n;
qusort(0,len-1);
for(int i=0; i<len; i++) {
printf("%d ",a[i]);
}
}
7.堆排序
#include<bits/stdc++.h>
using namespace std;
int a[1001000];
int n;
void adjustHeap(int i,int length) {
for(int k = i*2+1; k<length; k = k*2+1) {
if(k+1< length && a[k]<a[k+1]) {
k++;
}
if(a[k]>a[i]) {
swap(a[k],a[i]);
i=k;
} else {
break;
}
}
}
void heapSort() {
for(int i=n/2-1; i>=0; i--) {
adjustHeap2(i,n);
}
for(int i = n-1; i>0; i--) {
swap(a[0],a[i]);
adjustHeap2(0,i);
}
}
int main() {
cin>>n;
for(int i=0; i<n; i++) {
cin>>a[i];
}
heapSort();
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
}
8.计数排序
#include<bits/stdc++.h>
using namespace std;
int a[300006];
void countSort(int n) {
int maxNum =a[0];
for(int i=1; i<n; i++) {
if(maxNum<a[i]) {
maxNum =a[i];
}
}
int res[maxNum+1];
int res2[maxNum+1];
memset(res,0,sizeof(res));
memset(res2,0,sizeof(res2));
for(int i=0; i<n; i++) {
res[a[i]]++;
}
for(int i=1; i<maxNum+1; i++) {
res[i] = res[i]+res[i-1];
}
for(int i=0; i<n; i++) {
res2[res[a[i]]-1]=a[i];
res[a[i]]--;
}
for(int i=0; i<n; i++) {
a[i]=res2[i];
}
}
int main() {
int n;
cin>>n;
for(int i=0; i<n; i++) {
cin>>a[i];
}
countSort(n);
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
}
9.基数排序
#include<bits/stdc++.h>
using namespace std;
int a[1000006];
int n =0;
void radixSort() {
int mmax = a[0];
for(int i=1; i<n; i++) {
if(mmax<a[i]) {
mmax =a[i];
}
}
int mmaxLen=0;
while(mmax!=0) {
mmax=mmax/10;
mmaxLen++;
}
int bucket[10][n+1];
memset(bucket,0,sizeof(bucket));
int bucketElementCounts[10];
memset(bucketElementCounts,0,sizeof(bucketElementCounts));
for(int l = 0,nn=1; l<mmaxLen; l++,nn=nn*10) {
for(int i=0; i<n; i++) {
int digitOfElement = a[i] / nn % 10;
bucket[digitOfElement][bucketElementCounts[digitOfElement]]=a[i];
bucketElementCounts[digitOfElement]++;
}
int index = 0;
for(int i=0; i<10; i++) {
if (bucketElementCounts[i]!=0) {
for(int j=0; j<bucketElementCounts[i]; j++) {
a[index] = bucket[i][j];
index++;
}
bucketElementCounts[i]=0;
}
}
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
cout<<endl;
}
}
int main() {
cin>>n;
for(int i=0; i<n; i++) {
cin>>a[i];
}
radixSort2();
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
}