以下代码亲测,代码完全正确。
一、快速排序:
#include<stdio.h>
#define N 10
void quick(int m[],int ,int );
int main(){
int i;
int m[N]={10,4,78,54,23,1,41,54,66,10};
quick(m,0,N-1);
for(i=0;i<N;i++)
printf("%d ",m[i]);
return 0;
}
void quick(int m[],int l,int r){
if(l>=r) return ;
int i,j,temp;
temp=m[l];
i=l;j=r;
while(i!=j){
while(m[j]>=temp&&i<j) j--;
if(i<j) m[i++]=m[j];
while(m[i]<=temp&&i<j) i++;
if(i<j) m[j--]=m[i];
}
m[i]=temp;
quick(m,l,i-1);
quick(m,i+1,r);
}
二、冒泡排序:
#include<stdio.h>
#define N 10
void maopao();
int main(){
maopao();
return 0;
}
void maopao(){
int m[N]={10,4,78,54,23,1,41,54,66,10};
int i,j,temp;
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(m[j]>m[j+1]){
temp=m[j];
m[j]=m[j+1];
m[j+1]=temp;
}
for(i=0;i<N;i++)
printf("%d ",m[i]);
printf("\n");
}
三、二分法插入排序
#include<stdio.h>
#define N 10
void erfenfainsert();
int main(){
erfenfainsert();
return 0;
}
void erfenfainsert(){
int m[N]={10,4,78,54,23,1,41,54,66,10};
int left,high,mid;
int i,j,temp;
for(i=1;i<N;i++){
temp=m[i];
left=0;high=i-1;
while(left<=high){
mid=(left+high)/2;
if(temp<m[mid]) high=mid-1;
else left=mid+1;
}
for(j=i-1;j>=left;j--)
m[j+1]=m[j];
if(left!=i) m[left]=temp;
}
for(i=0;i<N;i++)
printf("%d ",m[i]);
printf("\n");
}
四、直接插入排序
#include<stdio.h>
#define N 10
void insert();
int main(){
insert();
return 0;
}
void insert(){
int m[N]={10,4,78,54,23,1,41,54,66,10};
int i,j,temp;
for(i=1;i<N;i++){
temp=m[i];
for(j=i-1;temp<m[j]&&j>=0;j--)
m[j+1]=m[j];
if(j+1!=i) m[j+1]=temp;
}
for(i=0;i<N;i++)
printf("%d ",m[i]);
printf("\n");
}
五、直接选择排序
#include<stdio.h>
#define N 10
void choose();
int main(){
choose();
return 0;
}
void choose(){
int m[N]={10,4,78,54,23,1,41,54,66,10};
int i,j,temp,k=0;
for(i=0;i<N;i++){
k=i;
for(j=i+1;j<N;j++)
if(m[j]<m[k]) k=j;
if(k!=i) {
temp=m[i];
m[i]=m[k];
m[k]=temp;
}
}
for(i=0;i<N;i++)
printf("%d ",m[i]);
printf("\n");
}
六、归并排序
#include<stdio.h>
#define N 10
int m[N]={44,5,12,78,444,65,32,12,14,98};
int t[N];
void merge_sort(int ,int ,int );
void merge(int ,int );
int main(){
int i;
merge(0,N-1);
for(i=0;i<N;i++)
printf("%d ",m[i]);
}
void merge(int low,int high){
if(low<high){
int mid=(low+high)/2;
merge(low,mid);
merge(mid+1,high);
merge_sort(low,mid,high);
}
}
void merge_sort(int low,int mid,int high){
int i,j,k;
i=low;j=mid+1;k=low;
while(i<=mid&&j<=high)
if(m[i]<m[j]) t[k++]=m[i++];
else t[k++]=m[j++];
while(i<=mid) t[k++]=m[i++];
while(j<=high) t[k++]=m[j++];
for(i=low;i<=high;i++)
m[i]=t[i];
}
如需学习二分查找,点击https://blog.csdn.net/huang1600301017/article/details/81022277