冒泡排序
冒泡排序是最简单的一种排序方法,但是效率低下,冒泡排序对 {\displaystyle n} n个项目需要O( n^2)的比较次数。
上图是冒泡排序的动态图
下面是c语言的实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_N 10
void bubbleSort(int []);
int main(){
int i, nums[MAX_N];
srand((unsigned)time(0));
printf("before sort:\t");
for(i = 0; i < MAX_N; i++){
nums[i] = rand() % (MAX_N * 2);
printf("%d ", nums[i]);
}
printf("\n");
bubbleSort(nums);
printf("after sort:\t");
for(i = 0; i < MAX_N; i++){
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
void bubbleSort(int nums[]){
int i, j, temp;
for(i = 0; i < MAX_N - 1; i++){
for(j = 0; j < MAX_N - 1 - i; j++ ){
if(nums[j] > nums[j+1]){
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
}
选择排序
选择排序是一种非常直观的排序方法。
选择排序每一次都会选择选取数组的剩余部分的极值,通过雨起始位置交换来来实现排序。
这是选择排序的动态图
选择排序的示例动画。红色表示当前最小值,黄色表示已排序序列,蓝色表示当前位置。
下面是c语言的实现代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_N 10
void selectionSort(int []);
int main(){
int i, nums[MAX_N];
srand((unsigned)time(0));
printf("before sort:\t");
for(i = 0; i < MAX_N; i++){
nums[i] = rand() % (MAX_N * 2);
printf("%d ", nums[i]);
}
printf("\n");
selectionSort(nums);
printf("after sort:\t");
for(i = 0; i < MAX_N; i++){
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
void selectionSort(int nums[]){
int i, j, temp, index;
for(int i = 0; i < MAX_N - 1; i++){
index = i;
for(j = i + 1; j < MAX_N; j++){
if(nums[j] < nums[index])
index = j;
}
if(index != i){
temp = nums[i];
nums[i] = nums[index];
nums[index] = temp;
}
}
}