C语言题:输入十个数用一维数组分别用冒泡法与选择排序法进行排序

如题所述

#include <stdio.h>
#include <conio.h>

#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/

/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (elemType arr[], int len) {
elemType temp;
int i, j;
for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,逆序反之) */
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}

/* 选择排序 */
/* 1. 将初始数组分为两段,前段为已排序数组,后段为未排序数组 */
/* 2. 在未排序数组中寻找最值元素,将其然后放到已排序数组的末尾 */
/* 3. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void selectionSort (elemType arr[], int len) {
elemType temp;
int i, j, k;
for(i=0; i<len-1; i++) { /*外循为排序趟数,len个数进行len-1趟 */
     k = i; /* 假设当前趟的第一个数为最小值,其下标记在k中(升序为寻找最小值,逆序反之) */
     for(j=i+1; j<len; j++) /* 从下一个数到最后一个数之间依次判断 */
if(arr[j] < arr[k]) /* 若k之后有更小的元素 */
k = j; /* 则将其下标记更新至k中 */
if(k != i) { /* 若k不为最初的i值,说明在其后找到比其更小的元素 */
temp = arr[k];
arr[k] = arr[i];
arr[i] = temp;
} /* 则交换最小值和当前数组第一个元素 */
}
}

/*打印数组*/
/* elemType arr[]: 打印目标数组; int len: 元素个数 */
void printArray (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
printf ("%d\t", arr[i]);
putchar ('\n');
}

int main (void) {
elemType arr1[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
elemType arr2[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
int len = 10;

printf ("原始数组1:\n");
printArray (arr1, len);
putchar ('\n');

printf ("冒泡排序:\n");
bubbleSort (arr1, len);
printArray (arr1, len);
putchar ('\n');

printf ("原始数组2:\n");
printArray (arr2, len);
putchar ('\n');

printf ("选择排序:\n");
selectionSort (arr2, len);
printArray (arr2, len);

getch (); /*屏幕暂留*/
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-28
选择法了吧
采纳我的答案吧。。