数据结构之排序

1 冒泡排序

 void swap(int *a, int *b)
 {
int tmp=*a;
 *a=*b;
 *b=tmp;


 } 
void BubbleSort(int data[],int cnt)
 {
int i=0,j=0;
 for(i=(cnt-1);i>0;i--)
 {
for(j=0;jif(data[j]>data[j+1])
{ int tmp=data[j+1];
 data[j+1]=data[j];
 data[j]=tmp;
}
}
 }
}


2 带media3查询中值的快速排序,有点问题

调用Qsort(data,0,n-1)  //n为数组长度

int media3(int data[],int l,int r)
{ int c=(l+r)/2;
if(data[l]>data[c])swap(&data[l],&data[c]);
if(data[l]>data[r])swap(&data[l],&data[r]);
if(data[c]>data[r])swap(&data[c],&data[r]);
swap(&data[c],&data[r-1]);
return data[r-1];


}
void Qsort(int data[],int l,int  r)
{
int i=0;
int j=r-1;
if (r<2) return;
int  pivot=data[(i+r)/2];//media3(data,0,r);
for(;;)
{
while(data[++i]while(data[--j]>pivot){}
if(iswap(&data[i],&data[j]);
else
break;
}
swap(&data[i],&data[r-1]);
Qsort(data,l,i-1);
Qsort(data,i+1,r);
}

3.别人写好的快速排序

调用 quick_sort(data,0,n-1); //n为数组长度

void quick_sort(int s[], int l, int r)  
{  
    if (l < r)  
    {  
        //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1  
        int i = l, j = r, x = s[l];  
        while (i < j)  
        {  
            while(i < j && s[j] >= x) // 从右向左找第一个小于x的数  
                j--;    
            if(i < j)   
                s[i++] = s[j];  
              
            while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数  
                i++;    
            if(i < j)   
                s[j--] = s[i];  
        }  
        s[i] = x;  
        quick_sort(s, l, i - 1); // 递归调用   
        quick_sort(s, i + 1, r);  
    }  
}  

你可能感兴趣的:(linuxc)