#include <stdio.h> void bubble_sort(int arr[], int len) { int i, j, temp; for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1 - i; j++) if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } int main() { int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 }; int len = (int) sizeof(arr) / sizeof(*arr); bubble_sort(arr, len); int i; for (i = 0; i < len; i++) printf("%d ", arr[i]); return 0; }
时间: 2024-04-01 13:33:47 浏览: 100
这是一个基本的冒泡排序算法的实现,使用C语言编写。该算法的思路是,从数组的第一个元素开始,依次比较相邻两个元素,如果前一个元素比后一个元素大,则交换它们的位置,直到最后一个元素。这样一轮比较后,最后一个元素就是数组中最大的元素。然后重复以上步骤,但是不再比较最后一个元素,直到所有元素都排好序。
具体实现中,使用两个嵌套的for循环,外层循环控制比较的轮数,内层循环控制每一轮中的比较次数。在内层循环中,如果发现前一个元素比后一个元素大,则交换它们的位置,以此来实现排序。
该算法的时间复杂度为O(n^2),不适用于大规模数据的排序。
相关问题
#include <stdio.h> #include <string.h> int swap(int s,int t); int main() { int ret; char a[5][100],*s,*t; int (*p)(int,int); s = a[0]; for (int i=0;i<5;i++) { scanf("%s",a[i]); } for (int i=1;i<5;i++) { t=a[i]; ret=strcmp(s, t); if(ret<0) { p=swap; (*p)(*s,*t); } } printf("%d\0",a[0]); printf("%d\0",a[1]); printf("%d\0",a[2]); printf("%d\0",a[3]); printf("%d\0",a[4]); return 0; } void swap(int*s,int*t) { int n=*t; *t=*s; *s=n; }这串代码怎么修改
这段代码有一些错误。首先,在`swap`函数中,参数`s`和`t`应该是指针类型。其次,在调用`swap`函数时,应该传递`s`和`t`的地址,而不是它们的值。此外,在最后输出结果时,应该使用`%s`格式化字符串而不是`%d`。最后,排序算法的实现也有误,应该使用冒泡排序或快速排序等算法来实现。
以下是修改后的代码:
```
#include <stdio.h>
#include <string.h>
void swap(char *s, char *t);
void bubble_sort(char arr[][100], int len);
int main() {
char a[5][100];
for (int i = 0; i < 5; i++) {
scanf("%s", a[i]);
}
bubble_sort(a, 5);
printf("%s\n", a[0]);
printf("%s\n", a[1]);
printf("%s\n", a[2]);
printf("%s\n", a[3]);
printf("%s\n", a[4]);
return 0;
}
void swap(char* s, char* t) {
char temp[100];
strcpy(temp, s);
strcpy(s, t);
strcpy(t, temp);
}
void bubble_sort(char arr[][100], int len) {
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (strcmp(arr[j], arr[j + 1]) > 0) {
swap(arr[j], arr[j + 1]);
}
}
}
}
```
修改后的代码中,我们将`swap`函数的参数类型改为了指针类型,并在`swap`函数和排序算法中使用了字符串比较函数`strcmp`来比较字符串大小。排序算法使用了冒泡排序算法来对字符串数组进行排序。最后,我们使用`%s`格式化字符串来输出排序后的结果。
用C语言 1.A数组中存储500个2000以内的随机整数,完成以下操作: (1)对A数组中的元素进行直接插入排序,显示排序所用时间; (2)对A数组中的元素进行希尔排序,显示排序所用时间; (3)对A数组中的元素进行起泡排序,显示排序所用时间; (4)对A数组中的元素进行快速排序,显示排序所用时间。部分参考代码如下: #include <windows.h> …… int main() { LARGE_INTEGER freq, start, end; QueryPerformanceFrequency(&freq); //获取CPU的时钟频率(HZ) QueryPerformanceCounter(&start); //获取开始时钟计数 调用对应查找算法 QueryPerformanceCounter(&end); //获取结束时钟计数 double us = (end.QuadPart - start.QuadPart)*1000000.0 / freq.QuadPart; cout << "执行时间:" << us << " 微秒" << endl; //输入算法运行时间 …… }
以下是完整的程序代码,包括四种排序算法的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define MAX_NUM 500
#define MAX_VAL 2000
void insert_sort(int arr[], int len);
void shell_sort(int arr[], int len);
void bubble_sort(int arr[], int len);
void quick_sort(int arr[], int left, int right);
int partition(int arr[], int left, int right);
int main()
{
int arr[MAX_NUM];
srand(time(NULL));
for (int i = 0; i < MAX_NUM; i++) {
arr[i] = rand() % MAX_VAL + 1;
}
LARGE_INTEGER freq, start, end;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
insert_sort(arr, MAX_NUM);
QueryPerformanceCounter(&end);
double us = (end.QuadPart - start.QuadPart) * 1000000.0 / freq.QuadPart;
printf("直接插入排序执行时间:%.2f微秒\n", us);
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
shell_sort(arr, MAX_NUM);
QueryPerformanceCounter(&end);
us = (end.QuadPart - start.QuadPart) * 1000000.0 / freq.QuadPart;
printf("希尔排序执行时间:%.2f微秒\n", us);
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
bubble_sort(arr, MAX_NUM);
QueryPerformanceCounter(&end);
us = (end.QuadPart - start.QuadPart) * 1000000.0 / freq.QuadPart;
printf("冒泡排序执行时间:%.2f微秒\n", us);
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
quick_sort(arr, 0, MAX_NUM - 1);
QueryPerformanceCounter(&end);
us = (end.QuadPart - start.QuadPart) * 1000000.0 / freq.QuadPart;
printf("快速排序执行时间:%.2f微秒\n", us);
return 0;
}
void insert_sort(int arr[], int len)
{
int i, j, temp;
for (i = 1; i < len; i++) {
temp = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
void shell_sort(int arr[], int len)
{
int gap, i, j, temp;
for (gap = len / 2; gap > 0; gap /= 2) {
for (i = gap; i < len; i++) {
temp = arr[i];
for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
arr[j + gap] = arr[j];
}
arr[j + gap] = temp;
}
}
}
void bubble_sort(int arr[], int len)
{
int i, j, temp;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void quick_sort(int arr[], int left, int right)
{
if (left < right) {
int pivot = partition(arr, left, right);
quick_sort(arr, left, pivot - 1);
quick_sort(arr, pivot + 1, right);
}
}
int partition(int arr[], int left, int right)
{
int pivot = arr[left];
while (left < right) {
while (left < right && arr[right] >= pivot) {
right--;
}
arr[left] = arr[right];
while (left < right && arr[left] <= pivot) {
left++;
}
arr[right] = arr[left];
}
arr[left] = pivot;
return left;
}
```
注意:程序使用了Windows系统提供的`QueryPerformanceCounter()`函数来计时,需要在编译时链接`kernel32.lib`库。另外,为了方便起见,本程序中的排序算法都是采用升序排序。
阅读全文