21xrx.com
2024-12-22 20:47:03 Sunday
登录
文章检索 我的文章 写文章
C++中常用的排序算法方法
2023-07-11 21:15:13 深夜i     --     --
C++ 排序算法 常用 方法

C++是一种流行的编程语言,被广泛应用于软件开发、游戏开发和数据科学领域等,并且C++拥有很多强大的功能和能够完成复杂任务的算法。其中,排序算法方法被广泛应用于计算机科学中,因为它们可以帮助我们根据一组数据的要求或规则对其进行排序。

以下是C++中常用的排序算法方法:

1. 选择排序(Selection Sort)

选择排序是一种简单的排序算法,它每次将未排定的元素中的最小值与当前未排序元素中的第一个元素交换。该过程不断迭代,直到所有元素都排好序。

选择排序的时间复杂度为O(n2),它的代码如下:

void selectionSort(int arr[], int n)

{

  int i, j, min_idx;

  for (i = 0; i < n-1; i++)

  {

    min_idx = i;

    for (j = i+1; j < n; j++)

      if (arr[j] < arr[min_idx])

        min_idx = j;

    swap(&arr[min_idx], &arr[i]);

  }

}

2. 冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法,它通过反复交换相邻的两个元素,直到排序完成。在每一轮比较过程中,它将遍历整个列表,并将较大的元素移到列表的末尾。

冒泡排序的时间复杂度为O(n2),它的代码如下:

void bubbleSort(int arr[], int n)

{

  int i, j;

  for (i = 0; i < n-1; i++)

    for (j = 0; j < n-i-1; j++)

      if (arr[j] > arr[j+1])

        swap(&arr[j], &arr[j+1]);

}

3. 快速排序(Quick Sort)

快速排序是一种常用的排序算法,它通过选择一个基准元素将列表分成小于和大于基准元素的两个子列表,并递归地对这些子列表进行排序。

快速排序的时间复杂度为O(nlogn),它的代码如下:

void quickSort(int arr[], int low, int high)

{

  if (low < high)

  {

    int pi = partition(arr, low, high);

    quickSort(arr, low, pi - 1);

    quickSort(arr, pi + 1, high);

  }

}

int partition (int arr[], int low, int high)

{

  int pivot = arr[high];

  int i = (low - 1);

  for (int j = low; j <= high - 1; j++)

  {

    if (arr[j] <= pivot)

    {

      i++;

      swap(&arr[i], &arr[j]);

    }

  }

  swap(&arr[i + 1], &arr[high]);

  return (i + 1);

}

4. 插入排序(Insertion Sort)

插入排序是一种简单的排序算法,它将列表分成已排序和未排序两个子列表,并逐个将未排序的元素插入到已排序的子列表中。在每次插入之后,已排序列表的大小都会增加1。

插入排序的时间复杂度为O(n2),它的代码如下:

void insertionSort(int arr[], int n)

{

  int i, key, j;

  for (i = 1; i < n; i++)

  {

    key = arr[i];

    j = i - 1;

    while (j >= 0 && arr[j] > key)

    {

      arr[j + 1] = arr[j];

      j = j - 1;

    }

    arr[j + 1] = key;

  }

}

总之,C++提供了多种排序算法方法,开发人员可以选择正确的算法来根据数据的要求或规则对其进行排序。无论是选择排序、冒泡排序还是快速排序或插入排序,它们均有其优缺点。开发人员可以根据特定的场景和数据集来选择正确的算法来实现更高效的排序。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复