#include <stdio.h>
void quick_sort(int a[],int low,int high) ;
int main()
{
int a[]={9,8,7,2,25,68,10,45,27};
int size=sizeof(a)/sizeof(a[0]);
/***********************************冒泡排序*****************************************
int i,j,ste=0,tem;
for(i=0;i<size-ste;)
{
for(j=i;j<size-ste;j++)
{
if(a[j]>a[j+1]){
tem=a[j];
a[j]=a[j+1];
a[j+1]=tem;
}
}
ste++;
}
for(i=0;i<size;i++)
printf("%d ",a[i]);
return 0;
}
************************************************************************************/
/*********************************** 选择排序普通实现 *******************************
int i,j,temp;
for(i=0;i<size-1;i++){//最后只剩下一个元素时必然已经排好序,所以不需要到i=size-1;
for(j=i+1;j<size;j++){//对于每一个i,遍历后面的内容进行比较
if(a[j]<a[i]){
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
for(i=0;i<size;i++){
printf("%d ",a[i]);
}
return 0;
*************************************************************************************/
/*快速排序
int left=0;
int right=size-1;
quick_sort(a,left,right);
for(left=0;left<size;left++)
{
printf("%d ",a[left]);
}
return 0;
}
void quick_sort(int a[],int left,int right)
{
int i=left;
int j=right;
if(i>j)return;
int pivot=a[i];
while(i<j)
{
while(i<j&&a[j]>=pivot)j--;
a[i]=a[j];
while(i<j&&a[i]<=pivot)i++;
a[j]=a[i];
}
a[i]=pivot;
quick_sort(a,left,i-1);
quick_sort(a,i+1,right);
}
***************************参考优快云博文实现***************************/
/**************************快排自己理解******************************/
int low=0;
int high=size-1;
quick_sort(a,low,high);
for(low=0;low<size;low++)
printf("%d ",a[low]);
return 0;
}
void quick_sort(int a[],int low,int high)
{
int i=low;
int j=high;
if(i>=j) return;
//一定注意必须有退出递归的条件,
int sta=a[i];
while(i<j) {
while(i<j&&a[j]>=sta) j--;
if(i<j)
a[i++]=a[j];//把a[j]的值填到a[i]并且i下移一位
while(i<j&&a[i]<sta) i++;
if(i<j)
a[j--]=a[i];//每一次覆盖都是在覆盖前一次有过的值
}
a[i]=sta;//循环完成后i=j
quick_sort(a,low,i-1);//递归排序左边
quick_sort(a,i+1,high);//递归排序右边
}