/*动态数组实现冒泡排序*/
#include<stdio.h>
#include<stdlib.h>
void bubble_sort(int a[], int n){//n为数组a的元素个数
//实现n-1轮排序
for (int i = 0; i < n - 1; i++){
for (int j = 0; j < n - 1 - i; j++){
if (a[j]>a[j + 1]){ //大的沉底,小的冒泡(从小到大排序)
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
/*选择排序,从数组中先找出最小数,置顶,之后从剩余序列中继续找出最小数,置于第二位,以此类推*/
void select_sort(int a[], int n){
int i, j;
for (i = 0; i < n; i++){
int k = i;//k用来记录最小数的位置
for (j = i + 1; j < n; j++){//此循环用来找出哪个数在本轮中最小
if (a[k]>a[j])//当ak大于aj,即前面的数大于后面的数时,说明此时最小数为aj,交换下标,此时k指向小的数
k = j;
}
if (k != i){//该轮中最小数为ak,则将ak置于该轮的顶部
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
int main(){
int N;
scanf("%d", &N);
int *num;
num = (int*)calloc(N, sizeof(int));//动态分配数组长度
for (int i = 0; i < N; i++){
scanf("%d", &num[i]);
}
select_sort(num, N);//选择排序
//bubble_sort(num,N);//冒泡排序
for (int i = 0; i < N; i++)
printf("%d ", num[i]);
free(num);//释放指针
system("pause");
return 0;
}
动态数组实现冒泡排序与选择排序
最新推荐文章于 2023-01-25 08:23:09 发布