应该是关于类的代码,但是写代码的时候第一句就报错了,不太懂是啥原因,怎么写才是对的啊
需要有Child类
可以根据图片里面的属性来定义Child类,然后把这些代码放到main()方法里进行测试就可以了。
图片里给出的应该是Java代码把,下面使用Java和C++分别作了个简单的实现:
代码如下:
参考链接:
#include <iostream>
using namespace std;
// https://www.runoob.com/cplusplus/cpp-classes-objects.html
class Child{
public :
string gender;
string weight;
string height;
string birth;
string words;
// https://www.runoob.com/cplusplus/cpp-constructor-destructor.html
Child();
void show();
};
Child::Child(){
}
// 显示Child类对象的信息
void Child::show(){
cout<<"孩子信息:"<<endl;
cout<<"性别:"<<gender<<endl;
cout<<"体重:"<<weight<<endl;
cout<<"身高:"<<height<<endl;
cout<<"出生时间:"<<birth<<endl;
cout<<"第一句话:"<<words<<endl;
}
int main(void){
// https://blog.csdn.net/weixin_40539125/article/details/83715393
Child * child = new Child();
child->gender="女";
child->weight="3010g";
child->height="48cm";
child->birth="2018/02/01 09:12";
child->words="Hello world!";
child->show();
delete(child);
return 0;
}
java的实现:
public class 产房传喜讯 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Child child = new Child();
child.gender="女";
child.weight="3010g";
child.height="48cm";
child.birth="2018/02/01 09:12";
child.words ="Hello world!";
// 打印Child对象的信息
System.out.println(child);
}
}
// 定义Child类
// https://zhuanlan.zhihu.com/p/439250799
class Child{
public String gender;
public String weight;
public String height;
public String birth;
public String words;
public Child() {
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getWords() {
return words;
}
public void setWords(String words) {
this.words = words;
}
@Override
// 用于打印对象的信息
public String toString() {
return "孩子信息 [性别:" + gender + ", 体重:" + weight + ", 身高:" + height + ", 出生时间:" + birth + ", 第一句话:"
+ words + "]";
}
}
快速排序的思想就是通过不断转换轴点元素最终完成排序
什么是轴点元素?
按升序排序来说,轴点元素就是左边所有元素比该元素小,右边所有元素比该元素大
以下面的图为例子,我们首先需要假设一个轴点元素,然后将所有比它小的放在它左边,比它大的放在它右边,然后通过递归的方式完成最终的排序
过程如下:
1)首先要先定义两个指针,开始时分别指向首尾,分别为left,right
2)假设以第一个元素为轴点元素,我们首先从又右开始往左扫描,用right位置的值与假设索引值进行比较,
①如果比pivot元素值大就不动,并且right指针向左移动一次,重复上述操作
②如果比pivot元素值小就将值赋给left所对应的位置,left向右移动一次,此时需要反向,从左往右开始扫描,重复上述操作
3)重复上述2的操作直到临界点,即left < right,退出操作
4)将假设轴点元素的值赋给最后的索引所在的位置,并返回索引
此时第一轮的选取轴点元素就完成了,且我们可以知道轴点元素左边都是比轴点元素小的,我们可以从left到轴点元素为界限再选取一次轴点元素,以轴点元素到right为界限选取一次轴点元素,依次类推,我们可以很轻松的就将所有元素排好序了,递归时我们需要确定明确的界限保证递归函数能够回溯,不然会造成死循环的情况,我们可以知道此时的界限就是需要left < right,在这个界限内可以一直调用函数直到满足界限,即只剩下一个元素,也就保证了所有元素的排序成功了
代码如下:
public class QuickSort {
public static void main(String[] args) {
int[] arr = {6,3,5,8,1,9,7,2,0};
int i = pivotIndex(arr, 0, arr.length);
System.out.println(Arrays.toString(arr));
}
//对[begin,end) 范围内的元素进行快速排序
public static void quickSort(int[] arr,int begin,int end){
if (end - begin < 2){
return;
}
//对范围内元素进行快速排序确定轴点
int mid = pivotIndex(arr, begin, end);
//对轴点元素左边进行快速排序
quickSort(arr, begin, mid);
//对轴点元素右边进行快速排序
quickSort(arr, mid + 1, end);
}
/**
* 构建范围在[begin,end)范围内元素的轴点元素
*
* @return 返回轴点元素的最终位置
*/
public static int pivotIndex(int[] arr,int begin,int end){
//备份begin元素值
int pivot = arr[begin];
//将end元素指向最后一个元素
end--;
//具体操作逻辑构建轴点元素位置
while (begin < end){
while(begin < end){
//从右往左判断
if (pivot < arr[end]){
end--;
}else {
arr[begin++] = arr[end];
break;
}
}
while(begin < end){
//从左往右判断
if (pivot > arr[begin]){
begin++;
}else {
arr[end--] = arr[begin];
break;
}
}
}
//将备份的轴点元素放入最终的位置
arr[begin] = pivot;
return begin;
}
}