#include<iostream> using namespace std; const int N=10; void BubbleSort(int a[],int n); int main() { int a[N],i; for(i=0;i<N;i++) cin>>a[i]; 1 分 for(i=0;i<N;i++) cout<<a[i]<<" "; return 0; } void BubbleSort(int a[],int n) { int i,j; for( 1 分 ;j<n;j++) for(i=0; 1 分 ;i++) if( 1 分 ) { int t=a[i]; 1 分 a[i+1]=t; } }补充完整
时间: 2024-04-26 10:21:28 浏览: 130
#include<iostream>
using namespace std;
const int N=10;
void BubbleSort(int a[],int n);
int main() {
int a[N],i;
for(i=0;i<N;i++)
cin>>a[i];
BubbleSort(a, N); // 调用冒泡排序函数
for(i=0;i<N;i++)
cout<<a[i]<<" ";
return 0;
}
void BubbleSort(int a[],int n) {
int i,j;
for(j = n - 1; j >= 1; j--) // 外层循环控制排序的轮数
for(i = 0; i < j; i++) // 内层循环控制每一轮中相邻元素的比较和交换
if(a[i] > a[i+1]) {
int t = a[i];
a[i] = a[i+1];
a[i+1] = t;
}
}
相关问题
完善代码1.冒泡排序 2.快速排序 3.堆排序#include <iostream> #include<cstdlib> #include<Windows.h> #include<ctime> using namespace std; void randomAssign(int a[],int n){ srand(time(0)); for(int i = 0; i < n;i++) a[i] = rand()%n+1; } void print(const char* str,int a[],int n){ cout<<str<<"="; for(int i = 0; i < n; i++) cout<<a[i] <<" "; cout<<endl; } void bubbleSort(int a[],int n){ for(int i = n; i >= 1; i--) for(int j = 1; j < i; j++) if(a[j+1] > a[j]) swap(a[j+1],a[j]); } int onePartition(int a[],int left,int right){ int pivot = a[left]; int i = left; int j = right; while(i < j){ while(XXXXXXXXXXXXX;) j++; if( i < j) a[i] = a[j]; XXXXXXXXXXXXX; XXXXXXXXXXXXX; if( i < j) a[j] = a[i]; } XXXXXXXXXXXXX; return i; } void quickSort(int a[],int left,int right){ if(left >= right) return ; int pos = XXXXXXXXXXXXX;; XXXXXXXXXXXXX; quickSort(a,pos+1,right); } void quickSort(int a[],int n){ quickSort(a,0,n-1); } void sift(int a[],int pos,int n){ //n表示长度 int parent = pos; int son = parent * 2 + 1; int tmp = a[parent]; while (son <= n - 1){ // 有效下标 0...n-1 if (son + 1 <= n - 1 && a[son] < a[son + 1]) son++; if(XXXXXXXXXXXXX) return; else { XXXXXXXXXXXXX; parent = son; son = parent * 2 + 1; } } } void heapSort(int a[],int n) { int i = 0; for (i = n / 2 - 1; i >= 0; i--) //从最后一个非叶结点开始 sift(a,i,n); for (i = n-1; i> 0; i--) { swap(a[0],a[i]); XXXXXXXXXXXXX; } } typedef void(*SortFunc)(int[], int); void testSort(SortFunc sortFunc,int n = 10){ DWORD start, end; int* a = new int[n]; randomAssign(a,n); if(n < 20) print("排序前",a,n); start = GetTickCount(); sortFunc(a,n); end = GetTickCount(); if(n < 20) print("排序后",a,n); cout<<"花费时间="<<end - start<<"毫秒"<<endl<<endl; delete [] a; } int main(){ testSort(bubbleSort,10); testSort(quickSort,10); testSort(heapSort,10); return 1; }
冒泡排序、快速排序和堆排序的代码已经提供,下面是完整的代码:
```c++
#include <iostream>
#include <cstdlib>
#include <Windows.h>
#include <ctime>
using namespace std;
void randomAssign(int a[], int n) {
srand(time(0));
for (int i = 0; i < n; i++)
a[i] = rand() % n + 1;
}
void print(const char* str, int a[], int n) {
cout << str << "=";
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
}
void bubbleSort(int a[], int n) {
for (int i = n; i >= 1; i--)
for (int j = 1; j < i; j++)
if (a[j + 1] > a[j])
swap(a[j + 1], a[j]);
}
int onePartition(int a[], int left, int right) {
int pivot = a[left];
int i = left;
int j = right;
while (i < j) {
while (a[j] >= pivot && i < j)
j--;
if (i < j)
a[i++] = a[j];
while (a[i] <= pivot && i < j)
i++;
if (i < j)
a[j--] = a[i];
}
a[i] = pivot;
return i;
}
void quickSort(int a[], int left, int right) {
if (left >= right)
return;
int pos = onePartition(a, left, right);
quickSort(a, left, pos - 1);
quickSort(a, pos + 1, right);
}
void quickSort(int a[], int n) {
quickSort(a, 0, n - 1);
}
void sift(int a[], int pos, int n) { // n表示长度
int parent = pos;
int son = parent * 2 + 1;
int tmp = a[parent];
while (son <= n - 1) { // 有效下标 0...n-1
if (son + 1 <= n - 1 && a[son] < a[son + 1])
son++;
if (tmp >= a[son])
break;
else {
a[parent] = a[son];
parent = son;
son = parent * 2 + 1;
}
}
a[parent] = tmp;
}
void heapSort(int a[], int n) {
int i = 0;
for (i = n / 2 - 1; i >= 0; i--) //从最后一个非叶结点开始
sift(a, i, n);
for (i = n - 1; i > 0; i--) {
swap(a[0], a[i]);
sift(a, 0, i);
}
}
typedef void(*SortFunc)(int[], int);
void testSort(SortFunc sortFunc, int n = 10) {
DWORD start, end;
int* a = new int[n];
randomAssign(a, n);
if (n < 20)
print("排序前", a, n);
start = GetTickCount();
sortFunc(a, n);
end = GetTickCount();
if (n < 20)
print("排序后", a, n);
cout << "花费时间=" << end - start << "毫秒" << endl << endl;
delete[] a;
}
int main() {
testSort(bubbleSort, 10);
testSort(quickSort, 10);
testSort(heapSort, 10);
return 1;
}
```
需要注意的是:
1. 在快速排序的 onePartition 函数中,i 和 j 的初始值应该分别为 left 和 right,而不是 left + 1 和 right - 1。这是因为在 while 循环中,i 和 j 分别向中间移动,不会越界。
2. 在堆排序的 sift 函数中,比较的应该是 tmp 和 a[son],而不是 a[parent] 和 a[son]。
3. 在堆排序的循环中,交换 a[0] 和 a[i] 后,应该对 a[0] 进行 sift 调整,而不是对 a[i] 进行 sift 调整。因为 a[i] 已经排好序了,不需要再调整。
#include <stdlib.h> #include <time.h> #include <iostream.h> int N = 10; void BubbleSort(int a,int n); int main() { srand((unsigned int)time(0)); int a[N]={0}; int i; for(i=0;i<N;i++) a[i] = rand()%100; cout << "The Data Befor Sort:"<< endl; for(i=0;i<N;i++) cout << a[i] << "\t"; cout << endl; BubbleSort(a[N],N); cout << "The Data After Sort:"<< endl; for(i=0;i<=N;i++) cout << a[i] << "\t"; cout << endl; return 0; } void BubbleSort(int a,int n) { int i,k,t; int flag=0; i=0; while(i<n-1) { k = n-1; while(k>i) { if(a[k-1]>a[k]) { t = a[k-1]; a[k-1] = a[k]; a[k] = t; flag = 1; } k--; } i++; if(flag = 0) break; else flag = 0; } }
这段代码中有几个问题:
1. 头文件 `iostream.h` 不应该有 `.h` 后缀,应该写成 `#include <iostream>`。
2. 在 `BubbleSort` 函数中,参数 `int a` 应该写成 `int a[]` 或 `int *a`,因为传入的是数组,而不是单个整数。
3. 在 `main` 函数中,调用 `BubbleSort` 函数时,应该传入数组 `a` 而不是 `a[N]`。
4. 在 `main` 函数中,第二个循环中的条件应该是 `i < N`,而不是 `i <= N`,因为数组下标从 0 开始计数,所以 `a[N]` 是越界的。
下面是修改后的代码:
```
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
const int N = 10;
void BubbleSort(int a[], int n);
int main() {
srand((unsigned int)time(0));
int a[N] = {0};
int i;
for (i = 0; i < N; i++)
a[i] = rand() % 100;
cout << "The Data Before Sort:" << endl;
for (i = 0; i < N; i++)
cout << a[i] << "\t";
cout << endl;
BubbleSort(a, N);
cout << "The Data After Sort:" << endl;
for (i = 0; i < N; i++)
cout << a[i] << "\t";
cout << endl;
return 0;
}
void BubbleSort(int a[], int n) {
int i, k, t;
int flag = 0;
i = 0;
while (i < n - 1) {
k = n - 1;
while (k > i) {
if (a[k - 1] > a[k]) {
t = a[k - 1];
a[k - 1] = a[k];
a[k] = t;
flag = 1;
}
k--;
}
i++;
if (flag == 0)
break;
else
flag = 0;
}
}
```
阅读全文
相关推荐













