一、冒泡排序
1. 方法简述: 每次相邻两个数比较,若升序,则将大的数放到后面,一次循环过后,就会将最大的数放在最后.
《舞动的排序之冒泡排序》 http://v.youku.com/v_show/id_XMzMyOTAyMzQ0.html
//很有意思的排序呈现,强烈建议观看
例如3,0,1,8,7,2,5,4,6,9是输入的待排序的数列,经过第一次排序,将最大的9放在最后,第二次排序,将剩下的2 3 5 4 7 6 8进行冒泡,将当前最大的8放在倒数第二的位置,以此类推
2. 代码呈现:
int num[10] = {3,0,1,8,7,2,5,4,6,9};
for (int i = 0; i < 10; i++) { //比较的次数
for (int j = 0; j < 10-1-i; j++) {
if (num[j] > num[j+1]) {
//交换j与j+1的值
int temp = num[j+1];
num[j+1] = num[j];
num[j] = temp;
}
}
}
//输出排好序的数字
for (int i = 0; i < 10; i++) {
printf("%d ",num[i]);
}
printf("\n");
二、选择排序
1. 方法简述:从第一个数开始,每次和后面剩余的数进行比较,若升序,则如果后边的数比当前数字小,进行交换,和后面的所有的数比较、交换后,就会将当前的最小值放在当前的位置。
《舞动的排序之选择排序》 http://v.youku.com/v_show/id_XMzMyODk5MDI0.html?f=16755664
输入的序列为3,0,1,8,7,2,5,4,6,9进行一次排序后将最小的数放在了第一位(a[0]与它后面的所有数进行比较,若a[0]比后面的数大,进行交换)后面的也是这个道理
2. 代码呈现:
int num[10] = {3,0,1,8,7,2,5,4,6,9};
for (int i = 0; i < 10 - 1; i++) {
//默认是最小的
int min = num[i];
for (int j = i + 1; j < 10; j++) {
//控制用min和后面的每一个比较
if (min > num[j]) {
//对应的数字比min还小 交换
min = num[j];
num[j] = num[i];
num[i] = min;
}
}
}
//输出排好序的数字
for (int i = 0; i < 10; i++) {
printf("%d ",num[i]);
}
printf("\n");
三、插入排序
1. 方法简述:第一个数与后一个数进行比较,如果为降序,则交换位置,然后与前面所有数字依次进行比较,以此类推。
《舞动的排序之插入排序》 http://v.youku.com/v_show/id_XMzMyODk3NjI4.html?f=1675566
2. 代码呈现:
// int num[10] = {3,0,1,8,7,2,5,4,6,9};
for (int i = 0; i < 9; i++) {
//让i与i+1进行比较
if (num[i] > num[i+1]) {
//交换值
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
//让num[i]与前面每一个进行比较
for (int j = i; j > 0; j--) {
if (num[j] < num[j-1]) {
temp = num[j];
num[j] = num[j-1];
num[j-1] = temp;
}
}
}
}
//输出排好序的数字
for (int i = 0; i < 10; i++) {
printf("%d ",num[i]);
}
printf("\n");
-
心得体会
排序算法博大精深,值得细细评味,仔细打磨,正所谓路漫漫其修远兮,吾将上下而求索,加油吧!