{一},冒泡排序
冒泡排序算法的运作如下:(从后往前)
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个即排序n-1次
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。每次对1~n-i范围进行比较即可
时间复杂度: O(n^2)
代码示例
void bubsort(int num[]){
cout<<"冒泡排序: "<<endl;
for(int i=1;i<n;i++){//排序N-1次
for(int j=1;j<=n-i;j++){
if(num[j]<num[j+1]){
int temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
for(int i=1;i<=n;i++)
cout<<num[i]<<" ";
cout<<endl;
}
{二},选择排序
很简单,排序n-1次,每次找出一个未被找出的最大值,放在未排序的队首或队尾。
代码示例:
void selectsort(int num[]){
cout<<"选择排序: "<<endl;
for(int i=1;i<n;i++){//排序N-1次
for(int j=i+1;j<=n;j++){
if(num[i]<num[j]){
int temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
// cout<<"第 "<<i<<" 次排序"<<endl;
// for(int i=1;i<=n;i++)
// cout<<num[i]<<" ";
// cout<<endl;
}
for(int i=1;i<=n;i++)
cout<<num[i]<<" ";
cout<<endl;
}
{三},插入排序
每次插入一个数之前,都与已经插入排序好的数组进行比较。
#include<stdio.h>
int main(){
int n;
int a[1010];
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++)
//cin>>a[i];
scanf("%d",&a[i]);
for(int i=1;i<n;i++){
if(a[i-1]<a[i]){
int temp=a[i];
int j=i;
while(j>0&&a[j-1]<temp){
a[j]=a[j-1];
j--;
}
a[j]=temp;
}
}
for(int i=0;i<n;i++)
printf("%d ",a[i]);
}
return 0;
}
{四},快速排序
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数;
https://blog.csdn.net/morewindows/article/details/6684558
#include<bits/stdc++.h>
using namespace std;
/*
思路:
5
3343 23232 32 -2 23
5
5 4 3 2 1
*/
int num[100];
int n;
void swap(int x,int y){
int temp=num[x];
num[x]=num[y];
num[y]=temp;
}
void quicksort(int left,int right){
if(left>right)
return;
int bv=left;
int st=left;
int en=right;
cout<<"此次排序的基准数是 "<<num[bv]<<endl;
while(left<right){
while(left<right&&num[left]<=num[right])
right--;
if(left<right)
swap(bv,right);
while(left<right&&num[left]>=num[right])
left++;
if(left<right)
swap(bv,left);
}
for(int i=1;i<=n;i++)
cout<<num[i]<<" ";
cout<<endl;
quicksort(st,left-1);
quicksort(left+1,en);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>num[i];
quicksort(1,n);
for(int i=1;i<=n;i++)
cout<<num[i]<<" ";
cout<<endl;
return 0;
}