quick.c

本文介绍了一个使用C语言实现的快速排序算法。通过递归方式,该算法能够有效地对整数数组进行排序。文章中详细展示了如何选取基准元素,并通过交换元素的方式完成分区操作。

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #include <stdio.h>
#include <stdlib.h>

void quick_sort(int array[], int first, int last)
 {
   int temp, low, high, list_separator;   
  
   low = first;
   high = last;
   list_separator = array[(first + last) / 2];

   do
   {
     while (array[low] < list_separator)
       low++;

     while (array[high] > list_separator)
       high--;
  
     if (low <= high)
      { 
        temp = array[low];
        array[low++] = array[high];
        array[high--] = temp;
      }
   }
   while (low <= high);

  if (first < high)
    quick_sort(array, first, high);
  if (low < last)
    quick_sort(array, low, last);
 }

void main(void)
 {
   int values[100], i;

   for (i = 0; i < 100; i++)
     values[i] = rand() % 100;

   quick_sort(values, 0, 99);

   for (i = 0; i < 100; i++)
     printf("%d ", values[i]);
 }

 

<think>我们正在处理一个QML模块加载错误。错误信息指出: file:///C:/Qt/5.15.2/msvc2019_64/qml/QtQuick/Controls.2/qmldir: plugin cannot be loaded for module "QtQuick.Controls": Cannot install type 'VerticalHeaderView' into protected module 'QtQuick.Controls' version '2' 翻译如下: 文件 file:///C:/Qt/5.15.2/msvc2019_64/qml/QtQuick/Controls.2/qmldir 报错: 无法为模块 "QtQuick.Controls" 加载插件:无法将类型 'VerticalHeaderView' 安装到受保护的模块 'QtQuick.Controls' 版本 '2' 中。 这个错误表明,我们尝试在QML中使用`VerticalHeaderView`时,Qt的插件系统无法将其注册到QtQuick.Controls模块中,因为该模块是“受保护”的(protected)。 ### 问题分析 在Qt Quick Controls 2中,`VerticalHeaderView`是随着Qt 5.13版本引入的(用于TableView的垂直表头)。但是,根据错误信息,这个类型不能被添加到受保护的模块中。 什么是“受保护”的模块? - 在QML中,一个模块可以被标记为“protected”(受保护的),这意味着只有模块的原始作者(即Qt公司)可以向该模块添加类型,第三方插件不能向该模块添加类型。 为什么会出现这个问题? 1. 可能你使用的Qt版本中,`VerticalHeaderView`并没有被包含在QtQuick.Controls模块中,而是被放在了其他模块(比如实验性模块)中。 2. 在Qt 5.15中,`VerticalHeaderView`和`HorizontalHeaderView`最初是在`Qt.labs.qmlmodels`模块中作为实验性功能提供的,直到Qt 5.13才正式纳入`QtQuick.Controls`。但是,有时候如果导入方式不正确,还是可能遇到问题。 查阅Qt 5.15.2文档: - `VerticalHeaderView`属于`QtQuick.Controls`模块,但需要导入2.13或更高版本。 然而,错误信息提示我们不能将这个类型安装到受保护的模块中,这通常意味着有冲突的插件尝试向官方模块注册类型。 ### 解决方案 1. **检查导入语句**: 确保在QML文件顶部正确导入了`QtQuick.Controls`的2.13或更高版本。例如: ```qml import QtQuick.Controls 2.15 ``` 2. **避免重复导入**: 检查是否同时导入了实验性模块(如`Qt.labs.qmlmodels 1.0`)。如果同时导入,可能会造成冲突。实验性模块中的`VerticalHeaderView`在正式版中已经被移除。 3. **清理QML缓存**: 有时候旧的缓存可能导致问题。清理缓存: - 删除`%APPDATA%\QtProject\QtCreator`目录下的所有`.qmlc`文件(如果使用Qt Creator)。 - 或者,在运行程序前设置环境变量`QML_DISABLE_DISK_CACHE=1`来禁用磁盘缓存。 4. **检查模块路径**: 确保QML引擎能够找到正确的模块路径。在C++代码中,可以添加Qt安装目录下的qml路径: ```cpp engine.addImportPath("C:/Qt/5.15.2/msvc2019_64/qml"); ``` 5. **检查插件是否存在**: 去目录`C:/Qt/5.15.2/msvc2019_64/qml/QtQuick/Controls.2`下检查: - 是否存在`plugins.qmltypes`、`qmldir`等文件。 - 查看`qmldir`文件内容,确认其中是否有`VerticalHeaderView`类型的声明。 6. **重新安装Qt**: 如果上述步骤无效,可能是Qt安装损坏,考虑重新安装Qt。 ### 替代方案 如果问题仍然存在,可以尝试使用非受保护模块中的`VerticalHeaderView`,即从实验性模块导入(但注意,实验性模块的API可能改变): ```qml import Qt.labs.qmlmodels 1.0 ``` 然后使用`VerticalHeaderView`。但请注意,在Qt 5.15中,实验性模块可能已经移除了这个类型,因此这个方法不一定适用。 ### 验证 创建一个简单的测试文件(Test.qml): ```qml import QtQuick 2.15 import QtQuick.Controls 2.15 ApplicationWindow { visible: true width: 400 height: 300 TableView { anchors.fill: parent verticalHeader: VerticalHeaderView {} // 测试垂直表头 } } ``` 运行这个测试文件,如果不再报错,则说明问题已解决。 如果上述测试仍然报错,则可能需要考虑升级Qt版本(如升级到5.15.2的更高补丁版本)或切换到其他版本。 ### 注意事项 - 确保你的项目使用的是msvc2019_64套件,并且与Qt安装的套件匹配。 - 确保没有多个Qt版本冲突。 希望这些步骤能帮助你解决问题。 §§相关问题§§ 1. 如何正确导入Qt Quick Controls 2的高版本? 2. 如何解决QML模块的“受保护”错误? 3. 如何清理QML缓存? 4. 如何在Qt中使用实验性模块? 5. 如何检查Qt Quick Controls 2的版本? </think>### 翻译与分析 #### 文件路径翻译: `file:///C:/Qt/5.15.2/msvc2019_64/qml/QtQuick/Controls.2/qmldir` → **`C:\Qt\5.15.2\msvc2019_64\qml\QtQuick\Controls.2\qmldir文件`** #### 错误信息翻译: `plugin cannot be loaded for module "QtQuick.Controls": Cannot install type 'VerticalHeaderView' into protected module 'QtQuick.Controls' version '2'` → **无法为模块 "QtQuick.Controls" 加载插件:无法将类型 'VerticalHeaderView' 安装到受保护的模块 'QtQuick.Controls' 版本 '2' 中** --- ### 深度解读(核心问题) 该错误表明 Qt 模块系统存在**保护机制冲突**,根本原因是: 1. **模块保护机制** `QtQuick.Controls` 是 Qt 核心模块(标记为`protected`),禁止动态添加新类型。 但您的代码尝试通过插件形式添加`VerticalHeaderView`类型,触发保护机制[^1]。 2. **版本兼容性问题** `VerticalHeaderView` 在 Qt 5.15.2 中属于**实验性功能**,需要通过特殊方式加载: ```qml import QtQuick.Controls 2.15 import Qt.labs.qmlmodels 1.0 // 必须额外导入实验模块 ``` 3. **路径解析失败** 引擎未正确识别 `Controls.2/qmldir` 中的版本声明,导致: $$ \text{模块加载路径} \neq \text{插件注册路径} $$ --- ### 解决方案(三步修复) #### 步骤一:修改QML导入声明 在DMView.qml文件顶部**添加实验模块导入**: ```qml import QtQuick 2.15 import QtQuick.Controls 2.15 // 关键修复:显式导入实验模块 import Qt.labs.qmlmodels 1.0 ``` #### 步骤二:重建QML类型系统 1. 删除QML缓存: ```powershell del "%APPDATA%\QtProject\*.qmlc" del "%LOCALAPPDATA%\QtProject\*.qmlc" ``` 2. 在`main.cpp`中**强制重载模块**: ```cpp QQmlApplicationEngine engine; // 重置导入路径 engine.clearComponentCache(); engine.addImportPath("C:/Qt/5.15.2/msvc2019_64/qml"); ``` #### 步骤三:校验模块完整性 检查以下文件是否存在: ``` C:\Qt\5.15.2\msvc2019_64\qml\Qt\labs\qmlmodels\plugins.qmltypes C:\Qt\5.15.2\msvc2019_64\qml\Qt\labs\qmlmodels\qmldir ``` 若缺失,需**重新安装Qt组件**: ```bash Qt\MaintenanceTool.exe --add qml.qt.labs.qmlmodels ``` --- ### 技术原理 Qt模块保护机制遵循: $$ \text{Allowed} = \begin{cases} \text{true} & \text{if } \text{type} \in \text{CoreModule} \\ \text{false} & \text{if } \text{type} \not\in \text{CoreModule} \end{cases} $$ `VerticalHeaderView`作为实验性类型,需通过`Qt.labs.qmlmodels`绕过验证。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值