几种常见的排序方法(C语言实现)

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>


//直接插入排序
void InsertSort(int arry[], int n)
{
    int i, j;
    int temp;//临时变量
    for (i = 1; i < n; i++)
    {
        temp = arry[i];
        for (j = i - 1; j >= 0; j--)
        {
            if (temp > arry[j])
                break;
            else
                arry[j + 1] = arry[j];
        }
        arry[j+1] = temp;
    }
}


//直接选择排序
void SelectSort(int arry[], int n)
{
    int i, j;
    int temp;
    for (i = 0; i < n-1; i++)
    {
        temp = i;
        for (j = i + 1; j < n; j++)
        {
            if (arry[j] < arry[temp])
                temp = j;
        }
        if(temp!=i)
            arry[temp] ^= arry[i] ^= arry[temp] ^= arry[i];//实现arry[temp]和arry[i]值交换
    }
}


//冒泡排序
void BubbleSort(int arry[], int n)
{
    int i, j, k;
    for (i = 0; i < n-1; i++)
    {
        for (j = i; j < n; j++)
        {
            if (arry[j - 1]>arry[j])
                arry[j - 1] ^= arry[j] ^= arry[j - 1] ^= arry[j];//实现arry[temp]和arry[i]值交换
        }
    }
}


//希尔排序第一类,
void ShellSort1(int arry[], int n)
{
    int i, j, k, gap,temp;
    for (gap = n / 2; gap > 0; gap /= 2)
    {
        for (k = 0; k < gap; k++)//同组先排
        {
            for (i = k+gap; i < n; i += gap)
            {
                temp = arry[i];
                for (j = i - gap; j >= 0; j -= gap)
                {
                    if (temp > arry[j])
                        break;
                    else
                        arry[j + gap] = arry[j];
                }
                arry[j + gap] = temp;
            }
        }
    }
}


//希尔排序第二类
void ShellSort2(int arry[], int n)
{
    int i, j, k, gap, temp;
    for (gap = n / 2; gap > 0; gap /= 2)
    {
        for (i = gap; i < n; i++)//所有组一起排序
            {
                temp = arry[i];
                for (j = i - gap; j >= 0; j -= gap)
                {
                    if (temp > arry[j])
                        break;
                    else
                        arry[j + gap] = arry[j];
                }
                arry[j + gap] = temp;
            }        
    }
}


//希尔排序,利用gap分组后采用冒泡方式排序
void ShellSort3(int arry[], int n)
{
    int i, j, k, gap, temp;
    for (gap = n / 2; gap > 0; gap /= 2)
    {
        for (k = 0; k < gap; k++)
        {
            for (i = k; i < n-gap; i += gap)
            {
                for (j = k+gap; j <n ; j += gap)
                {
                    if (arry[j - gap]>arry[j])
                        arry[j - gap] ^= arry[j] ^= arry[j - gap] ^= arry[j];
                }
                
            }
        }
    }
}


//快速排序,递归调用
void QuickSort(int arry[], int s,int t)
{
    int i, j;


    if (s < t)
    {
        i = s;
        j = t+1;
        while (1)
        {
            do
            {
                i++;
            }while (!(arry[s] <= arry[i] || i >= t));
            do
            {
                j--;
            } while (!(arry[s] >= arry[j] || j <= s));
            
            if (i < j)
                arry[i] ^= arry[j] ^= arry[i] ^= arry[j];
                
            else
                break;
        }
        if (arry[j]!= arry[s])
            arry[j] ^= arry[s] ^= arry[j] ^= arry[s];
        QuickSort(arry, s, j-1);
        QuickSort(arry, j + 1, t);
    }
}


int main()
{
    int arry1[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41};
    int arry2[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 };
    int arry3[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 };
    int arry4[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 };
    int arry5[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 };
    int arry6[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 };
    int arry7[15] = { 19,15,13,10,3,30,23,76,5,16,7,30,32,2,41 };
    
    //七种方法任选一种,但效率有别
    //一般情况下:快速排序>直接插入>直接选择==冒泡
    //希尔排序看情况而定。一般优于直接选择排序


    //InsertSort(arry1, 15);
    
    //SelectSort(arry2, 15);
    
    //BubbleSort(arry3, 15);
    
    //ShellSort1(arry4, 15);
    //ShellSort2(arry5, 15);    
    //ShellSort2(arry6, 15);
    
    //QuickSort(arry7,0,14);
    




    int i = 0;
    for (i = 0; i < 15; i++)
    {
        printf("%d  ", arry7[i]);
    }


    system("pause");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是常见的几种排序算法的 C 语言实现: 1. 冒泡排序 ```c void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 2. 插入排序 ```c void insertionSort(int arr[], int n) { for (int i = 1; i < n; i++) { int j = i - 1; int key = arr[i]; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } } ``` 3. 选择排序 ```c void selectionSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int min_index = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[min_index]) { min_index = j; } } int temp = arr[i]; arr[i] = arr[min_index]; arr[min_index] = temp; } } ``` 4. 快速排序 ```c void quickSort(int arr[], int left, int right) { if (left < right) { int pivot = partition(arr, left, right); quickSort(arr, left, pivot - 1); quickSort(arr, pivot + 1, right); } } int partition(int arr[], int left, int right) { int pivot = arr[right]; int i = left - 1; for (int j = left; j < right; j++) { if (arr[j] < pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp = arr[i + 1]; arr[i + 1] = arr[right]; arr[right] = temp; return i + 1; } ``` 5. 归并排序 ```c void mergeSort(int arr[], int left, int right) { if (left < right) { int mid = (left + right) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); merge(arr, left, mid, right); } } void merge(int arr[], int left, int mid, int right) { int n1 = mid - left + 1; int n2 = right - mid; int L[n1], R[n2]; for (int i = 0; i < n1; i++) { L[i] = arr[left + i]; } for (int j = 0; j < n2; j++) { R[j] = arr[mid + 1 + j]; } int i = 0, j = 0, k = left; while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } while (i < n1) { arr[k] = L[i]; i++; k++; } while (j < n2) { arr[k] = R[j]; j++; k++; } } ``` 以上是几种常见排序算法的 C 语言实现,需要注意的是,在实际使用时需要根据具体的需求和数据情况选择合适的排序算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值