void sort(int a[],int n){ int i,j,k; for(i=0;i<n-1;i++){ for(j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){k=a[j];a[j]=a[j+1];a[j+1]=k; } } } }
时间: 2024-01-23 07:02:01 浏览: 153
这段代码实现了一个简单的冒泡排序算法,其基本思路是,每次从数组的第一个元素开始,依次比较相邻的两个元素,如果前面的元素比后面的元素大,则交换它们的位置。交换完一轮后,再对除了最后一个元素外的其它元素重复上述操作,直到所有元素都被排序。
这个函数的参数包括一个整型数组 `a` 和数组的长度 `n`。函数通过两个嵌套的 for 循环来实现冒泡排序,外层循环控制排序的轮数,内层循环控制每一轮比较的次数。如果相邻的两个元素顺序不正确,则交换它们的位置。这个排序算法的时间复杂度是 O(n^2)。
需要注意的是,这个函数实现了从小到大的排序,因为在比较相邻的两个元素时,如果前面的元素比后面的元素大,则交换它们的位置。如果要实现从大到小的排序,只需要将 `if(a[j]>a[j+1])` 改为 `if(a[j]<a[j+1])` 即可。另外,这个函数的实现方式是直接在原数组上进行排序,因此在调用这个函数之前需要备份原数组,以防止排序结果覆盖原数组。
相关问题
//直接插入排序算法 void insertSort(int a[],int n) { int i,j; int t; for(i=1;i<n;i++) { t=a[i]; j=i-1; while(j>=0 && a[j]>t) { a[j+1]=a[j]; j--; } a[j+1]=t; } } //简单选择排序算法 void selectSort(int a[],int n) { int i,j,min,temp=0; for(i=0;i<n-1;i++); { min=1; for(j=i+1;j<n;j++) { if(a[min]>a[j]) min=j; } if(min!=1) { temp=a[i]; a[i]=a[min]; a[min]=temp; } } } //冒泡排序算法 void bubbleSort(int a[],int n) { int tem; int i,j; for(i=0;i<n-1;i++) { for(j=0;j<n-1-i;j++) { if(a[j]>a[j+1]) { tem=a[j]; a[j]=a[j+1]; a[j+1]=tem; } } } }问题
你的代码中有一个错误,就是在选择排序中的第一个for循环中多了一个分号,导致循环体为空,没有执行任何操作。正确的代码应该是:
```c
//简单选择排序算法
void selectSort(int a[],int n) {
int i,j,min,temp=0;
for(i=0;i<n-1;i++) //去除多余的分号
{
min=i; //将min初始化为i
for(j=i+1;j<n;j++)
{
if(a[min]>a[j])
min=j;
}
if(min!=i)
{
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
}
```
这样就可以保证程序正常运行了。
#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;
}
}
```
阅读全文