如何利用随机数生成函数,产生待排序序列,序列长度可任意指定。
如何设计CSort类 ,完成冒泡排序、选择排序和插入排序三种排序方法设计。
输出并比较三种方法
任意一种?那么显然冒泡比较简单
我帮你写一个,你参考参考
#include <iostream>
#include <cstdlib>
#include <ctime>
class CSort {
public:
CSort(int length) {
arrLength = length;
arr = new int[arrLength];
}
~CSort() {
delete[] arr;
}
void GenerateRandomArray() {
srand(time(0));
for (int i = 0; i < arrLength; i++) {
arr[i] = rand() % 100;
}
}
void BubbleSort() {
for (int i = 0; i < arrLength - 1; i++) {
for (int j = 0; j < arrLength - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
void PrintArray() {
for (int i = 0; i < arrLength; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
private:
int* arr;
int arrLength;
};
int main() {
CSort sortObj(10);
sortObj.GenerateRandomArray();
std::cout << "生成的随机数序列: ";
sortObj.PrintArray();
sortObj.BubbleSort();
std::cout << "排序以后: ";
sortObj.PrintArray();
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}Linklist;
//创建链表
Linklist* create(int array[],int n){
int i;
Linklist *head,*p,*q;
head=(Linklist *)malloc(sizeof(Linklist));
head->next=p=q=NULL;
for(i=0;i<n;i++){
q=(Linklist *)malloc(sizeof(Linklist));
q->data=array[i];
q->next=NULL;
if(head->next==NULL){
head->next=q;
p=q;
}else{
p->next=q;
p=q;
}
}
return head;
}
//将数字有序插入
Linklist * insert(Linklist *head,int num){
Linklist *p,*q;
q=(Linklist *)malloc(sizeof(Linklist));
q->data=num;
q->next=NULL;
p=head;
if(head->next==NULL){//最后一次为空还需要插入值
head->next=q;
}else{
while(p->next!=NULL&&num>p->next->data){
p=p->next;
}
q->next=p->next;
p->next=q;
}
return head;
}
//删除头元素
Linklist *delHead(Linklist *head){
Linklist *p;
p=head->next;
head->next=p->next;
free(p);
return head;
}
int main(void){
int n,i,j,temp;
int array[1000];
int sum,sum1,sum2,count;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&array[i]);
}
//给数组排序
for(i=1;i<n;i++){
for(j=i;j>0;j--){
if(array[j]<array[j-1]){
temp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
}
}
}
//创建链表
Linklist *head=create(array,n);
Linklist *p;
//计算频度
count=0;
while(head->next->next!=NULL){
sum1=head->next->data;
head=delHead(head);
sum2=head->next->data;
head=delHead(head);
sum=sum1+sum2;
count+=sum;
head=insert(head,sum);
}
printf("%d",count);
return 0;
}