几种排序算法

来源:互联网 发布:淘宝广告图片怎么做的 编辑:程序博客网 时间:2024/04/18 11:23


void insert_sort(int v[], int len)
{
 for (int i = 1; i < len; ++i) {
  int t = v[i];
  for (int j = i; j > 0 && v[j-1] > t; --j)
    v[j] = v[j-1];
  v[j] = t;
 }
}

void insert_sort2(int v[], int len)
{
 for (int i = 1; i < len; ++i) {
  int t = v[i], low = 0, high = i - 1;
  while (low <= high) {
   int mid = (low + high) / 2;
   if (t < v[mid])
    high = mid - 1;
   else
    low = mid + 1;
  }
  // move
  for (int k = i; k > low; --k)
   v[k] = v[k-1];
  v[low] = t;
 }
}

void shell_sort(int v[], int len)
{
 for (int g = len/2; g != 0; g /= 2) {
  for (int i = g; i < len; ++i) {
   int t = v[i];
   for (int j = i; j >= g && t < v[j-g]; j -= g)
    v[j] = v[j-g];
   v[j] = t;
  }
 }
}

void sort(int array[], int len)
{
 --len;
 for (int i = 0; i < len; ++i) {
  for (int j = 0; j < len; ++j) {
   if (array[j] > array[j+1]) {
    int tmp = array[j];
    array[j] = array[j+1];
    array[j+1] = tmp;
   }
  }
 }
}

// --------------------------------------------------------
int qsort_partition(int v[],int low,int high)
{
 int pv = v[low];
 while (low < high) {
  while (low < high && v[high] >= pv) --high;
  int t = v[low]; v[low] = v[high]; v[high] = t;

  while(low < high && v[low] <= pv) ++low;
  t = v[low]; v[low] = v[high]; v[high] = t;
 }

 return low;
}

void qsort(int v[], int low, int high)
{
  if (low < high) {
  int pi = qsort_partition(v, low, high);
  qsort(v, low, pi-1);
  qsort(v, pi+1, high);
  }

原创粉丝点击