直插排序
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int n;
void insertSort(int a[],int n){
for(int i=2;i<=n;i++){
a[0]=a[i];
int j=i-1;
while(a[0]<a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=a[0];
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
}
int main(){
freopen("d:\\in.txt","r",stdin);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
insertSort(a,n);
return 0;
}
希尔排序
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int n;
void insertSort(int a[],int d,int n){
for(int i=d+1;i<=n;i++){
a[0]=a[i];
int j=i-d;
while(a[0]>a[j]&&j>=1){
a[j+d]=a[j];
j-=d;
}
a[j+d]=a[0];
}
}
void solve(){
memset(a,0,sizeof a);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int k=n/2;k>=1;k/=2){
insertSort(a,k,n);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
cout<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
冒泡排序
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int n;
void solve(){
memset(a,0,sizeof a);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int cnt=0;
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++){
if(a[i]<a[j]){
swap(a[i],a[j]);
cnt++;
}
}
cout<<cnt;
}
int main(){
freopen("d:\\in.txt","r",stdin);
int t=1;
while(t--){
solve();
}
return 0;
}
堆排序
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int n;
void change(int a[],int k,int end){
int i=k,j=k*2;
while(j<=end){
if(j<end&&a[j]>a[j+1])
j++;
if(a[i]>a[j]) swap(a[i],a[j]);
i=j;
j*=2;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=n/2;i>=1;i--) change(a,i,n);
for(int i=1;i<=n;i++){
cout<<n<<" ";
for(int j=1;j<=n;j++) cout<<a[j]<<" ";
cout<<endl;
swap(a[1],a[n-i+1]);
change(a,1,n-i);
}
return 0;
}
快速排序
#include<iostream>
using namespace std;
class Problem
{
public:
Problem();
~Problem();
void print()
{
for (int i = 1; i < len; i++)
cout << arr[i] << " ";
cout << arr[len] << endl;
}
void QSort();
private:
int* arr;
int len;
void QSort(int, int);
};
Problem::Problem()
{
cin >> len;
arr = new int[len + 1];
for (int i = 1; i <= len; i++)
cin >> arr[i];
}
Problem::~Problem()
{
delete[]arr;
}
void Problem::QSort(int low, int high)
{
int i = low, j = high, p = arr[low];
while (low < high)
{
while (low < high && arr[high] >= p)
high--;
if (low >= high)
{
break;
}
arr[low] = arr[high];
low++;
while (low < high && arr[low] <= p)
low++;
if (low < high)
{
arr[high] = arr[low];
high--;
}
}
arr[low] = p;
print();
if (i < low - 1)
QSort(i, low - 1);
if (high + 1 < j)
QSort(high + 1, j);
}
void Problem::QSort() { QSort(1, len); }
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) {
if (i)cout << endl;
Problem p;
p.QSort();
}
return 0;
}