二分查找排序,希尔排序,merge排序,二分排序

805阅读 0评论2011-12-08 坏坏小丸子
分类:

//二分查找排序
#include "sort.h"
static int binarysearch(int data[], int len, int d)
{
 int l = 0;
 int h = len - 1;
 int m;
 while(l <= h)
 {
  m = (h + l) / 2;
  if(data[m] > d)
  {
   h = m - 1;
  }
  else
  {
   l = m + 1;
  }
 }
 return l;
}
 
int binarysearch_sort(int data[], int len)
{
 int i, j;
 int n;
 int x;
 for(i = 1; i < len; i++)
 {
  x = data[i];
  n = binarysearch(data, i, data[i]);
  for(j = i - 1; j >= n; j--)
  {
   data[j + 1] = data[j];
  }
  data[n] = x;
 }
 return 0;
}
//二分排序
#include "sort.h"
int binarysort(int data[], int len)
{
 int i, j;
 int x;
 for (i = 1; i < len; i++)
 {
  x = data[i];
  for (j = i - 1; j >= 0 && x < data[j]; j--)
  {
   data[j + 1] = data[j];
  }
  data[j + 1] = x;
 }
 return 0;
}
//merge排序
#include "sort.h"
int merge(int data1[], size_t len1, int data2[], size_t len2, int data[])
{
 int i = 0;
 int j = 0;
 int k = 0;
 int buf[len1 + len2];
 while(i < len1 && j < len2)
 {
  if(data1[i] < data2[j])
  {
   buf[k] = data1[i];
   k++;
   i++;
  }
  else
  {
   buf[k] = data2[j];
   k++;
   j++;
  }
 }
 while(i < len1) buf[k++] = data1[i++];
 while(j < len2) buf[k++] = data2[j++];
 for(i = 0;i < len1 + len2; i++)
  data[i] = buf[i];
 return 0;
}
int mergerescution(int data[], size_t len)
{
 int a = len / 2;
 if(len == 1)
  return 0;
 mergerescution(data, a);
 mergerescution(data + a, len - a);
 merge(data, a, data + a, len - a, data);
 return 0;
}
int mergesort(int data[], int len)
{
 int gap = 1;
 int i;
 while(gap < len)
 {
  for (i = 0; i <= len - gap * 2; i += gap * 2)
  {
   merge(data + i, gap, data + i + gap, gap, data + i);
  }
  if ((len - i) > gap)
  {
   merge(data + i, gap, data + i + gap, len - i - gap, data + i);
  }
  gap = gap * 2;
 }
 return 0;
}
//希尔排序
#include "sort.h"
int sort_shell(int data[], size_t len)
{
 int gap = len;
 int i, j;
 while ((gap = gap / 2) > 0)
 {
  for (i = 0; i < len - gap; i++)
  {
   for (j = i + gap; j >= gap; j -= gap)
   {
    if (data[j] < data[j - gap])
    {
     SWAP(data[j], data[j - gap]);
    }
   }
  }
 }
 return 0;
}
上一篇:Android JNI 的诡异现象--标记1
下一篇:校内新鲜事洁癖