C++实现快速排序及字符串排序示例

需积分: 10 1 下载量 186 浏览量 更新于2024-09-16 收藏 874B TXT 举报
"这篇资源包含了三个C语言程序,分别用于实现快速排序算法,对整数数组和字符串数组进行排序,并且展示了一个简单的指针遍历数组的示例。" 快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法,将一个大问题分解成两个或更多的小问题来解决。在快速排序中,我们选择一个元素作为“基准”(pivot),然后将数组分为两部分:一部分包含所有小于基准的元素,另一部分包含所有大于或等于基准的元素。这个过程被称为分区操作。接着,我们递归地对这两部分进行快速排序,直到整个数组有序。 第一个程序展示了如何对整数数组进行快速排序。它首先接收用户输入的五个整数,然后通过两层嵌套循环实现分区和交换元素。外层循环遍历数组,内层循环则负责比较相邻元素并根据需要交换它们的位置,从而实现排序。 ```c for(i=0;i<5;i++) // 外层循环 for(j=0;j<5-i;j++) // 内层循环 if(a[j]>a[j+1]) // 如果当前元素大于下一个元素 { k=a[j]; // 保存当前元素 a[j]=a[j+1]; // 将下一个元素替换到当前位置 a[j+1]=k; // 将保存的当前元素放到下一个位置 } ``` 第二个程序则是对字符串数组进行快速排序,同样采用了两层循环,但这里使用`strcmp`函数比较字符串而不是直接比较数值。`strcmp`函数返回值小于零表示前一个字符串小于后一个字符串,因此可以判断字符串的顺序。 ```c for(i=0;i<5;i++) for(j=0;j<4-i;j++) if(strcmp(a[j],a[j+1])<0) // 如果当前字符串小于下一个字符串 { strcpy(temp,a[j]); // 保存当前字符串 strcpy(a[j],a[j+1]); // 将下一个字符串替换到当前位置 strcpy(a[j+1],temp); // 将保存的当前字符串放到下一个位置 } ``` 第三个程序并没有实现快速排序,而是展示了如何使用指针遍历数组。数组`a`包含五个整数,`p`是一个指向数组首元素的指针。通过`for`循环和指针递增,程序依次打印出数组中的每个元素。 ```c p=a; // 指针p指向数组a的首元素 for(i=0;i<5;i++,p++) // 循环5次,每次迭代后指针p向后移动一位 printf("%d\n",*p); // 打印指针p所指向的元素 ``` 这三个程序都是基于C语言编写的,可以使用VC++ 6.0或其他C/C++编译器进行编译和运行。虽然标题提到"C++快速排序",但实际上示例代码是C语言的实现。在C++中,可以使用类和函数对象来实现快速排序,但这超出了这些示例的范围。