zoukankan      html  css  js  c++  java
  • 快速排序之C++实现

    快速排序之C++实现

    一趟快速排序的算法是:
      1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
      2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
      3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
      4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
      5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

    一、源代码:QuickSort.cpp

     1 #include<iostream>
     2 using namespace std;
     3 /*定义输出一维数组的函数*/
     4 void print(int array[], int n)
     5 {
     6     for (int i = 0; i < n; i++)
     7     {
     8         cout << array[i] << " ";
     9     }
    10     cout << endl;
    11 }
    12 
    13 //选择基准(轴)
    14 int partition(int array[], int low, int high)
    15 {
    16     while (low < high)
    17     {
    18         //low位置为轴点,low右边的不小于low左边的
    19         while (low < high&&array[low] <= array[high])
    20         {
    21             high--;
    22         }
    23         int temp = array[low];
    24         array[low] = array[high];
    25         array[high] = temp;
    26         //high位置为轴点,high左边的不大于high右边的
    27         while (low < high&&array[low] <= array[high])
    28         {
    29             low++;
    30         }
    31         temp = array[low];
    32         array[low] = array[high];
    33         array[high] = temp;
    34     }
    35     return low;
    36 }
    37 
    38 void quickSortHelp(int array[], int low, int high)
    39 {
    40     if (low < high)
    41     {
    42         //找枢轴元位置
    43         int location = partition(array, low, high);
    44         //递归调用
    45         quickSortHelp(array, low, location - 1);
    46         quickSortHelp(array, location + 1, high);
    47     }
    48 }
    49 
    50 void quickSort(int array[], int n)
    51 {
    52     //以第一个数组元素为基准(轴)
    53     quickSortHelp(array, 0, n - 1);
    54 }
    55 
    56 int main()
    57 {
    58     //定义待排序的一维数组
    59     int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 };
    60     //输出原始数组
    61     cout << "原始数组是:" << endl;
    62     print(array, 10);
    63     //对数组进行排序
    64     quickSort(array, 10);
    65     //输出排序后的数组
    66     cout << "排序后的数组是:" << endl;
    67     print(array, 10);
    68     return 0;
    69 }

    二、运行效果

  • 相关阅读:
    点滴
    Type.GetType() 返回null的解决办法
    DDD中的实体
    开启博客之路
    Pytorch框架学习(1)张量操作
    GitHub学习之路1
    JavaScript学习之路1
    Java&Eclipse&Maven的折腾
    Ubuntu学习之路1
    Windos下的一些命令集合
  • 原文地址:https://www.cnblogs.com/zfc-java/p/7392482.html
Copyright © 2011-2022 走看看