插入排序与快排

来源:互联网 发布:net编程语言 编辑:程序博客网 时间:2024/05/17 04:03
#include< stdio.h>
#define ARR_SIZE(a)   (sizeof((a)) / sizeof((a[0])))

int a[] = {1, 23, 32, 0, 2, 5, 23};

void insert_sort(int *a, int n) {
    int i, j,temp;

    for (i = 1;i < n; i++) {
      temp = a[i];
      for (j = i - 1; j >= 0 && temp <a[j]; j--) {
         a[j + 1] = a[j];
      }

      a[j + 1] = temp;
    }
}
void quick_sort(int *a, size_t left, size_t right){
    size_t p =(left + right) / 2;
    int pivot =a[p];
    size_t i =left, j = right;

    for(;i <j;){
      while (i < p && a[i] <=pivot)++i;
      if (i < p){
         a[p] = a[i];
         p = i;
      }
      while (j > p && a[j] >=pivot)--j;
      if (j > p){
         a[p] = a[j];
         p = j;
      }
      a[p] = pivot;

      if (p - left > 1)quick_sort(a, left, p -1);
      if(right - p > 1)quick_sort(a, p + 1,right);
    }
}

void display(int n){
    for (int i =0; i < n; ++i)printf("%d\t", a[i]);
    printf("\n");
}

int main(void){
   quick_sort(a, 0, ARR_SIZE(a) - 1);
   display(ARR_SIZE(a));
}
0 0
原创粉丝点击