排序算法:几种常见的排序算法的C语言代码

 

程的 候排序算法是 常用到的,排序是数据 构的重要 成部分。下面是几种常 的C 言示例代
1.选择排序(Selection Sort)
   1. 找出a[0]~a[N-1]之 的最小 或者最大 a[0] 行交 这样 a[0]就确定了。
   2. 找出a[1]~a[N-1]之 的最小 或者最大 和a[1] 行交 这样 a[1]就确定了。
   3. 这样处理进行 N-1回循 。(N是排序的 值的个数
*ptr是int型的参数数 n是数据的个数。
选择排序示例代 如下:
void selection_sort(int *ptr, int n)
{
    int i, j, k;
    for(i=0; i<n-1; i++) {
         k = i;
         for(j=i+1; j<n; j++){
              if(*(ptr+k) > *(ptr+j)) {
                 k = j;
              }
         }
         swap((ptr+i), (ptr+k));
    }
}

void swap(int *ptr1, int *ptr2)
{
   int w;
   w = *ptr1;
   *ptr1 = *ptr2;
   *ptr2 = w;
}
如果把if(*(ptr+k) > *(ptr+j)){  换成 if(*(ptr+k) < *(ptr+j)){  话,就是降序排序了。上面的例子是升序拍序。
2. 换排序(冒泡排序)(Bubble Sort)
*ptr是int型的参数数 n是数据的个数。
交换排序示例代 如下:
void bubble_sort(int *ptr, int n)
{
    int i, j;
    for(i=0; i<n-1; i++){
        for(j=n-1; j>i; j--){
            if(*(ptr+j-1) > *(ptr+j)){
               swap((ptr+j-1), (ptr+j));
            }
        }
   }
}

void swap(int *ptr1, int *ptr2) {
   int w;
   w = *ptr1;
   *ptr1 = *ptr2;
   *ptr2 = w;
} 
3.插入排序(Insertion Sort)
插入排序的示例代码如下:
*ptr是int型的参数数 n是数据的个数。
void insertion_sort(int *ptr, int n) {
    int i, j, k;
    for(i=1; i<n; i++){
        k = *(ptr+i);
        for(j = i-1; j >=0 && k<*(ptr+j); j--){
            *(ptr+j+1) = *(ptr+j);
        }
        *(ptr+j+1) = k;
    }
}
4.快速排序(Quick Sort)
快速排序的示例代码如下:
*ptr是int型的参数数 n是数据的个数。
void quick_sort(int *ptr, int left, int right) {
     int i, j;
     if(left >= right) return;
     j = left;
     for(i=left+1; i <= right; i++)
        if(*(ptr+i) < *(ptr+left))
        swap(ptr+(++j), ptr+i);
        swap(ptr+left, ptr+j);
        quick_sort(ptr, left, j-1);
        quick_sort(ptr, j+1, right);
    }

void swap(int *ptr1, int *ptr2) {
     int w;
     w = *ptr1;
     *ptr1 = *ptr2;
     *ptr2 = w;
} 

你可能感兴趣的:(数据结构,编程,c,算法,语言)