冒泡排序:
#include<stdio.h>
int main()
{
int a[5]={3,2,5,1,6},n=5;
for(int i=0;i<n-1;i++){
int flag=1;
for(int j=0;j<n-1-i;j++){
if(a[j]>a[j+1]){
int t=a[j+1];
a[j+1]=a[j];
a[j]=t;
flag=0;
}
}
if(flag) break;
}
for(int i=0;i<n;i++) printf("%d ",a[i]);
return 0;
}
选择排序:
#include<stdio.h>
int main()
{
int a[5]={3,2,5,1,6},n=5;
for(int i=0;i<n-1;i++){
for(int j=i;j<n;j++){
if(a[i]>a[j]){
int t=a[j];
a[j]=a[i];
a[i]=t;
}
}
}
for(int i=0;i<n;i++) printf("%d ",a[i]);
return 0;
}
快速排序:
#include<stdio.h>
void Q(int a[],int low,int high){
if(low>=high) return ;
int i=low,j=high,t=a[low];
while(i!=j){
while(a[j]>=t&&i<j) j--;
while(a[i]<=t&&i<j) i++;
if(i<j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
a[low]=a[i];
a[i]=t;
}
Q(a,low,i-1);
Q(a,i+1,high);
}
int main()
{
int a[100],n;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
Q(a,0,n-1);
for(int i=0;i<n;i++) printf("%d ",a[i]);
return 0;
}
插入排序:
#include<stdio.h>
int main()
{
int a[5]={3,2,5,1,6},n=5;
for(int i=1;i<n;i++){
int j=i-1,key=a[i];
while(j>=0&&key<a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=key;
}
for(int i=0;i<n;i++) printf("%d ",a[i]);
return 0;
}
希尔排序:
#include<stdio.h>
void se(int a[],int n){
int d,i,j;
for(d=n/2;d>=1;d=d/2){
for(i=d+1;i<=n;i++){
if(a[i]<a[i-d]){
a[0]=a[i];
for(j=i-d;j>0&&a[0]<a[j];j-=d)
a[j+d]=a[j];
a[j+d]=a[0];
}
}
}
}
int main()
{
int a[100],n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
se(a,n);
for(int i=1;i<=n;i++) printf("%d ",a[i]);
return 0;
}