美文网首页
常用排序算法

常用排序算法

作者: Pepi熊 | 来源:发表于2020-09-11 11:00 被阅读0次
#include<stdio.h>

//冒泡算法
void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
void BubbleSort(int *arr, int length)
{
    for (int i = 0; i < length; i++)//O(n^2)
    {
        for (int j = 0; j+1 < length; j++)//O(n)相邻元素冒泡
        {
            if (arr[j] > arr[j + 1])
                swap(&arr[j], &arr[j+1]);
        }
    }
}

//选择排序法
void SelectionSort(int *arr, int length)
{
    for (int i = 0; i < length; i++)//O(n^2)
    {
        int min = arr[i];//赋初值,最小值
        int count = i;//记录最小值下标
        for (int j = i+1; j < length; j++)//选择最大的,O(n)
        {
            if (min > arr[j])
            {
                min = arr[j];//更新最小值
                count = j;//更新最小值下标
            }
        }
        swap(&arr[i], &arr[count]);//交换最小值
    }
}

//插入排序
void InsertSort(int *arr, int length)
{
    int temp;
    for (int i = 0; i < length; i++)//O(n^2)
    {
        temp = arr[i];
        int j = i;
        for (; j > 0 && temp < arr[j - 1];  j--)//如果满足向前挪位置,j--一直运行
        {
                arr[j] = arr[j - 1];
        }
        arr[j] = temp;//插入
    }
}

//快速排序
//int Partition(int *arr, int length, int start, int end)
//{
//  if (arr == NULL || length <= 0 || start < 0 || end <= 0 || end >= length)
//      return -1;
//  int base = arr[start];
//
//  int t_start = start;
//  int t_end = end;
//
//  
//
//  while (t_start < t_end && arr[t_start] < base)
//  {
//      --t_end;//向左移动
//      if (t_start < t_end)//什么时候交换
//      {
//          arr[t_start] = arr[t_end];
//          ++t_start;
//      }
//  }
//
//  while (t_start < t_end && arr[t_start] < base)
//  {
//      ++t_start;//向右移动
//      if (t_start < t_end)//什么时候交换
//      {
//          arr[t_end] = arr[t_start];
//          --t_end;
//      }
//  }
//  arr[t_start] = base;
//  return t_start;
//}
//
//void QuickSort(int* arr, int length, int start, int end)
//{
//  if (start == end)
//      return;
//  int index = Partition(arr, length, start, end);
//
//  if (index > start)
//      QuickSort(arr, length,start, index - 1);
//  if (index < end)
//      QuickSort(arr, length, index + 1, end);
//}



//int get_mid(int b[], int left, int right)
//{
//  int pivot = b[right];
//  while (left < right)
//  {
//      while (b[right] >= pivot && left < right) right--;
//      b[left] = b[right];
//      while (b[left] < pivot && left < right) left++;
//      b[right] = b[left];
//  }
//  b[left] = pivot;
//  return left;
//}
//void q_sort(int b[], int left, int right)
//{
//  if (left < right)
//  {
//      int mid = get_mid(b, left, right);
//      q_sort(b, left, mid - 1);
//      q_sort(b, mid + 1, right);
//  }
//       
//}
void quiksort(int a[], int low, int high)
{
    int left = low;//左边
    int right = high;//右边
    int temp = a[left];

    if (low < high)
    {
        while (left < right)
        {
            while ((a[right] >= temp) && (left < right))//右指针左移
            {
                right--;
            }
            a[left] = a[right];//赋值
            while ((a[left] <= temp) && (left < right))//左指针右移
            {
                left++;
            }
            a[right] = a[left];
        }
        a[left] = temp;
        quiksort(a, low, left - 1);
        quiksort(a, right + 1, high);
    }
    else
    {
        return;
    }
}
int main()
{
    int a[10] = { 1,9,5,3,4,2,6,8,7,0 };
    int length = sizeof(a) / sizeof(int);
    //BubbleSort(a, length);
    //SelectionSort(a, length);
    //InsertSort(a, length);
    //q_sort(a, 0, 9);
    quiksort(a, 0, 9);
    for (int i = 0; i < length; i++)
    {
        printf("%d\t", a[i]);
    }
    return 0;
}

相关文章

  • 算法04-棋牌游戏常用排序算法

    算法04-棋牌游戏常用排序算法 一、介绍 棋牌游戏常用排序算法包括:链式基数排序、插入排序、希尔排序。 二、链式基...

  • python 排序算法

    文章概述 介绍各大常用经典的排序算法和效率,以及python实现常用算法(冒泡排序,选择排序,快速排序,插入排序)...

  • 常用的排序算法

    常用的排序算法 常用的排序算法插入排序折半插入排序shell 排序冒泡排序选择排序快速排序基数排序归并排序堆排序K...

  • 常用算法

    常用排序算法

  • 常见排序算法

    常用排序算法

  • 全面介绍9种常用的排序算法

    本篇给大家介绍几种软件工程中常用的排序算法 所有排序算法的核心的代码都在《常用排序算法核心代码》[https://...

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • Java语言——数组排序算法

    数组有很多常用的算法,包括冒泡排序、直接选择排序和反转排序。 一、冒泡排序 冒泡排序是最常用的数组排序算法之一,它...

  • Python一行代码实现快速排序

    上期文章排序算法——(2)Python实现十大常用排序算法为大家介绍了十大常用排序算法的前五种(冒泡、选择、插入、...

  • 常用排序算法

    常用的排序算法 在此总结一下常用排序算法的代码实现 #include using namespace std;t...

网友评论

      本文标题:常用排序算法

      本文链接:https://www.haomeiwen.com/subject/tymvektx.html