排序算法 --- C语言

插入排序
void insertion_sort(char array[], unsigned int first, unsigned int last)
{
 int i, j, temp;
 for (i = first + 1; i < last; i++)
 {
  temp = array[i];
  j = i - 1;

  while ((j >= first) && (array[j] > temp))
  {
   array[j + 1] = array[j];
   j--;
  }
  array[j + 1] = temp;
 }
}


快速排序
void swap(int *a, int *b)
{
 int t = *a;
 *a = *b;
 *b = t;
}

void quicksort(int arr[], int begin, int end)
{
 if (end > begin)
 {
  int pivot = arr[begin];
  int beginIter = begin + 1;
  int endIter = end + 1;

  // 找到大于pivot的元素,扔到尾部
  while ( beginIter < endIter)
  {
   if (arr[beginIter] < piv)
   {
    beginIter++;
   }
   else
   {
    swap(&arr[beginIter], &arr[endIter]);
    endIter--;
   }
  }

  // 将pivot节点放到分界处  
  if (arr[beginIter] < pivot)
  {
   swap(&arr[beginIter], &arr[begin]);
  }
  else if (end - begin == 1)
  {
   return;
  }
  else
  {
   beginIter--;
   swap(&arr[beginIter], &arr[begin]);
  }

  //对两个分区分别迭代
  quicksort(arr, begin, beginIter);
  quicksort(arr, endIter, end);
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值