终于也要打个基础了,准备笔试面试。
十大排序原理:https://www.cnblogs.com/onepixel/articles/7674659.html
1.冒泡排序
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include <cstdio>
#include <cmath>
#include<stdlib.h>
using namespace std;
int main(){
int n,i,j;
cin>>n;
int temp;
int a[500];
for(i=0;i<n;i++){
cin>>a[i];
}
for(i=0;i<n;i++){
for(j=1;j<n-i;j++){
if(a[j]<a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
for(i=0;i<n;i++){
cout<<a[i]<<' ';
}
return 0;
}
/*
10
6 10 9 8 3 1 2 5 7 4
*/
2.选择排序
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include <cstdio>
#include <cmath>
#include<stdlib.h>
using namespace std;
int main(){
int n,i,j;
cin>>n;
int temp,min_index;
int a[500];
for(i=0;i<n;i++){
cin>>a[i];
}
for(i=0;i<n;i++){
min_index=i;
for(j=i+1;j<n;j++){
if(a[min_index]>a[j]){
min_index=j;
}
}
temp=a[min_index];
a[min_index]=a[i];
a[i]=temp;
}
for(i=0;i<n;i++){
cout<<a[i]<<' ';
}
return 0;
}
/*
10
6 10 9 8 3 1 2 5 7 4
*/
3.插入排序
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include <cstdio>
#include <cmath>
#include<stdlib.h>
using namespace std;
int main(){
int n,i,j;
cin>>n;
int temp,min_index;
int a[500];
for(i=0;i<n;i++){
cin>>a[i];
}
for(i=1;i<n;i++){
min_index=i;
for(j=i;j>0;j--){
if(a[j]<a[j-1]){
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<n;i++){
cout<<a[i]<<' ';
}
return 0;
}
/*
10
6 10 9 8 3 1 2 5 7 4
for(j=0;j<n;j++){
cout<<a[j]<<' ';
}
*/
4.快速排序
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include <cstdio>
#include <cmath>
#include<stdlib.h>
using namespace std;
int a[500];
int quicksort(int left,int right){
if(left>=right) return 0;
int i=left;
int j=right;
int temp=a[left];
while(i<j){
while(a[j]>=temp&&j>i) j--;
if(j>i)
{
a[i]=a[j];
i++;
}
while(a[i]<temp&&j>i) i++;
if(j>i)
{
a[j]=a[i];
j--;
}
}
a[i]=temp;
quicksort(left,i-1);
quicksort(i+1,right);
return 0;
}
int main(){
int n,i,j;
cin>>n;
int temp,min_index;
// int a[500];
for(i=0;i<n;i++){
cin>>a[i];
}
quicksort(0,n-1);
for(i=0;i<n;i++){
cout<<a[i]<<' ';
}
return 0;
}
/*
10
9 10 9 8 3 1 2 5 7 4
9
6 8 9 8 3 1 2 5 7
*/
5.计数排序
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<stdlib.h>
using namespace std;
int main(){
int n,i,j=0;
cin>>n;
int temp,min_index;
int a[500];
int b[1000]={0};
for(i=0;i<n;i++){
cin>>a[i];
}
for(i=0;i<n;i++){
b[a[i]]+=1;
}
for(i=0;i<1000;i++){
while(b[i]>0){
a[j]=i;
j++;
b[i]--;
}
}
for(i=0;i<n;i++){
cout<<a[i]<<' ';
}
return 0;
}
6.归并排序
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<stdlib.h>
using namespace std;
int a[10000];
void Merge(int left, int mid, int right)
{
int *temp = new int[right - left + 1];
int t = 0;
int i = left;
int j = mid+1;
while (i <= mid && j <= right)
{
if(a[i]<a[j])
{
temp[t]=a[i];
i++;
}
else{
temp[t]=a[j];
j++;
}
t++;
}
while (i <= mid )
{
temp[t]=a[i];
i++;
t++;
}
while (j <= right )
{
temp[t]=a[j];
j++;
t++;
}
t = 0;
for (int i = left; i <= right; i++)
{
a[i] = temp[t++];
}
delete[] temp;
}
int MergeSort(int l,int r){
if(l<r){
int m=(l+r)/2;
MergeSort(l, m);
MergeSort(m+1, r);
Merge(l,m,r);
}
return 0;
}
int main(){
int n,i,j=0;
cin>>n;
int temp;
// int a[500];
int b[1000]={0};
for(i=0;i<n;i++){
cin>>a[i];
}
MergeSort(0,n-1);
for(i=0;i<n;i++){
cout<<a[i]<<' ';
}
return 0;
}
/*
10
6 10 9 8 3 1 2 5 7 4
9
6 10 9 8 3 1 2 5 7
*/
7.堆排序
#include<bits/stdc++.h>
using namespace std;
void adjust(vector<int> &array, int n, int size){
int maxs=n;
int left=2*n+1;
int right=2*n+1;
if(left<size&&array[left]>array[maxs]){
maxs=left;
}
if(right<size&&array[right]>array[maxs]){
maxs=right;
}
if(maxs!=n){
swap(array[maxs],array[n]);
adjust(array, maxs, size);
}
return;
}
int main() {
int n,m,k;
scanf("%d",&n);
vector<int> a;
for(int i=0;i<n;i++){
int temp;
scanf("%d",&temp);
// cin>>a[i];
a.push_back(temp);
}
for(int i=n/2-1;i>0;i--){
adjust(a,i,a.size());
}
int index=n-2;
for(int i=n-1;i>=0;i--){
swap(a[0],a[i]);
adjust(a,0,i);
}
for(int i=0;i<n;i++) cout<<a[i]<<' ';
return 0;
}
/*
4
99
98
70
96
*/