#include<stdio.h>
void Swap(int a[],int i,int j)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
void Bubble_sort(int a[],int n)
{
for(int i=0;i<n-1;i++)
{for(int j=0;j<n-i-1;j++)
{if(a[j]>a[j+1])
{
Swap(a,j+1,j);
}
}
}
}
void Cocktail_sort(int a[],int n)
{
int left=0,right=n-1;
while(left<right)
{
for(int i=left;i<right;i++)
if(a[i]>a[i+1])
Swap(a,i,i+1);
right--;
for(int i=right;i>left;i--)
if(a[i-1]>a[i])
Swap(a,i-1,i);
left++;
}
}
void Selection_sort(int a[],int n)
{
for(int i=0;i<n;i++)
{
int k=i;
for(int j=i;j<n;j++)
if(a[j]<a[k])
k=j;
Swap(a,k,i);
}
}
void Insertion_sort(int a[],int n)
{
for(int i=1;i<n;i++)
{
int get=a[i];
int j=i-1;
while(j>=0&&a[j]>get)
{
a[j+1]=a[j];
j--;
}
a[j+1]=get;
}
}
void Insertoin_sort_Dichotomy(int a[],int n)
{
for(int i=1;i<n;i++)
{
int left=0,right=i-1,get=a[i];
while(left<=right)
{
int mid=(left+right)/2;
if(a[mid]>get)
right=mid-1;
else
left=mid+1;
}
for(int j=i-1;j>=left;j--)
{
a[j+1]=a[j];
}
a[left]=get;
}
}
int Partition(int a[],int left,int right)
{
int pivot=a[right];
int k=left-1;
for(int i=left;i<right;i++)
{
if(a[i]<pivot)
Swap(a,i,++k);
}
Swap(a,++k,right);
return k;
}
void Quick_sort(int a[],int left,int right)
{
if(left>right)
return ;
int pivot_index=Partition(a,left,right);
Quick_sort(a,left,pivot_index-1);
Quick_sort(a,pivot_index+1,right);
}
int Binary_find(int a[],int n)
{
int left=0,right=n-1,x;
int mid=(left+right)/2;
printf("\n请输入要查找的数字:");
scanf("%d",&x);
while(left<right)
{
if(a[mid]<x)
left=mid+1;
else{
if(a[mid]>x)
right=mid-1;
else
break;
}
mid=(left+right)/2;
}
return mid;
}
void quick(int a[],int left,int right)
{
if(left>right)
return ;
int temp,i,j;
temp=a[left];
i=left;
j=right;
while(i<j)
{
while(i<j&&a[j]>=temp)
j--;
while(i<j&&a[i]<=temp)
i++;
if(i<j)
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=temp;
quick(a,left,i-1);
quick(a,i+1,right);
return ;
}
int main ()
{
int a[]={10,25,34,89,2,45,82,87,56,32,45,21,59,98,64,3,8,7};
int n=sizeof(a)/sizeof(int);
for(int i=0;i<n;i++)
printf("%d\t",a[i]);
printf("\n");
quick(a,0,n-1);
for(int i=0;i<n;i++)
printf("%d\t",a[i]);
int p=Binary_find(a,n);
printf("\n%d在第%d位\n",a[p],p+1);
return 0;
}
排序汇总
最新推荐文章于 2024-05-10 08:50:52 发布