數據結構_4(常見代碼)

一下是一些經常使用查找和排序算法的代碼(c語言):算法

順序查找shell

int sq_search(keytype key[], int n, keytype key)
{
    int i;
    for(i=0;i<n;i++)
       if(key[i] == key)   //查找成功
         return i;  //返回關鍵字在key[]中的下標
    return -1;  //查找失敗
}

折半查找ide

int bin_search(keytype key[], int n, keytype k)
{
    int low = 0, high = n-1, mid;
    while(low<high)
    {
        mid = (low+high) / 2;
        if(key[mid] == k)
          return mid;       //查找成功,返回mid 
        if(k > key[mid])    //在後半序列查找 
          low = mid + 1;
        else                //在前半序列查找 
          high = mid - 1;
    }
    return -1;              //查找失敗,返回-1 
} 

直接插入排序ui

void insertsort(keytype k[], int n)
{
    int i, j;
    keytype tmp;
    for(i=2;i<=n;i++)   //循環n-1次,執行n-1趟插入排序 
    {
        tmp = k[i];     //將k[i]保存在臨時變量tmp中 
        j = i-1;
        while(j>0 && tmp<k[j]) //找到tmp的位置插入 
           k[j+1] = k[j--];    //將k[j]後移,再將j-1 
        k[j+1] = tmp;          //將元素tmp插入到指定位置,第i-1趟插入完成 
    }
} 

選擇排序spa

void selectsort(keytype k[], int n)
{
    int i, j, min;
    keytype tmp;
    for(i=1;i<=n-1;i++)
    {
        min = i;
        for(j=i+1;j<=n;j++) //在後n-i+1個元素中找到最小的元素
           if(k[j] < k[min])
              min = j;      //用min記錄最小元素的位置 
        if(min != j)        //若是最小的元素不位於後n-i+1個元素的下標 
        {
           tmp = k[min];
           k[min] = k[i];   //元素的交換 
           k[i] = tmp;
        }
    }
} 

冒泡排序(改進後的代碼)3d

void bubblesort(keytype k[], int n)
{
    int i, j, tmp, flag = 1;
    for(i=1;i<=n-1 && flag == 1;i++)
    {   flag = 0;
       for(j=1;j<=n-i;j++)
       {  if(k[j]>k[j+1])
          {
              tmp = k[j+1];
              k[j+1] = k[j];
              k[j] = tmp;
              flag = 1;
          }
       } 
    } 
} 
View Code

希爾排序code

void shellsort(keyype k[], int n)
{
    int i, j, flag, gap = n;
    keytype tmp;
    while(gap > 1)
    {
        gap = gap/2;  //縮小增量,每次減半 
        do            //子序列運用冒泡排序,固然其餘的也行 
        {
            flag = 0;
            for(i=1;i<=n-gap;i++)
            {
                j = i + gap;
                if(k[i]>k[j])
                {
                    tmp = k[i];
                    k[i] = k[j];
                    k[j] = tmp;
                    flag = 1;
                }
            }
        }while(flag != 0)
    }
} 
View Code

快速排序blog

//快速排序
void quicksort(keytype k[], int s, int t)
{
    int i, j;
    if(s<t)
    {
        i = s;
        j = t + 1;
        while(1)
        {
            do i++;
            while(!(k[s]<=k[i] || i==t))
                do j--;
            while(!(k[s]>=k[j] || j==s))
            if(i<j)
              swap(k[i],k[j]);
            else
              break;
        }
        swap(k[s],k[j]);
        quick(k,s,j-1);
        quick(k,j+1,t);
    }
} 
View Code
相關文章
相關標籤/搜索