冒泡排序、选择排序、快速排序、二分法查找

来源:互联网 发布:雷洋 知乎 编辑:程序博客网 时间:2024/05/17 16:45

从网上学习,并调试通过:

void bubble_sort(int array[], int n)
{
    int i, j, temp;
    
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n-i; j++)
        {
            if (array[j] > array[j+1])
            {
                temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }


            printf("i = %d\n", i);
        }
    }
    
    return;
}


void select_sort(int buf[], int n)
{
    int temp;
    int pos;
    int i,j;
    for (i = 0; i < n-1; i++)
    {
        temp = buf[i];
        pos = i;


        for (j=i+1; j<n; j++)
        {
            if (buf[j] < temp)
            {
                temp = buf[j];
                pos = j;
            }
        }


        buf[pos] = buf[i];
        buf[i] = temp;
    }
}


void quick_sort(int array[], int low, int high)
{
    int left, right, middle;
    int temp;


    left = low;
    right = high;
    middle = (left + right)/2;


    while (left < right) {
        while (left<high && array[left]<array[middle])
            left++;


        while (right>low && array[right]>array[middle])
            right--;


        if (left <= right) {
            temp = array[left];
            array[left] = array[right];
            array[right] = temp;
            left++;
            right--;
        }
    }
    
    if (left < high)
        quick_sort(array, left, high);


    if (right > low)
        quick_sort(array, low, right);


}

int search(int *a, int key, int low, int high)
{
    int mid;
    if(low > high)
        return -1;
    mid = (low + high)/2;
    if(a[mid] == key) 
        return mid;
    else if(a[mid]>key)
        return search(a, key, low, mid-1);
    else return search(a,key,mid+1, high);
}
    
int search_c_plus_plus(int *a, int key, int length)
{
    int mid;


    if(length <= 0)
        return -1;


    int front = 0;
    int end = length -1;
    mid = (front + end)/2;
    
    while(front<end && a[mid] != key)
    {
        if(a[mid] < x)
            front = mid +1;
        if (a[mid] > x)
            end = mid-1;
        mid = (front + end)/2;
    }


    if(a[mid] != x)
        printf("not find.\n");
    else {
        printf("find it, in %d\n", mid+1);
    }
}