简单排序算法:
我们来一起讨论3种简单的排序算法。(VS2013中进行编写)
冒泡排序:
#include<stdio.h>
#include<stdlib.h>
#define n 3 //定义一个宏方便后面改数组的大小。
int main(){
int i, j, temp;
int enter_num[n]; //定义一个Int型的数组,方便储存数据。
for (i = 0; i < n; i++){
scanf_s("%d", &enter_num[i]);
}
for (i = 0; i < n - 1; i++){ //冒泡法排序的核心。
for (j = i + 1; j < n; j++){
if (enter_num[i] < enter_num[j]){//交换两个变量的值。
temp = enter_num[i];
enter_num[i] = enter_num[j];
enter_num[j] = temp;
}
}
}
printf("排序完后的数:\n");
for (i = 0; i < n; i++){ //遍历输出数组。
printf("%d\n", enter_num[i]);
}
system("pause");
return 0;
}
每进行一趟排序,就把最大的数放到序列的最后面,依次循环,直到最后排序成功。``
接下来,我们再讨论一下这个
选择排序:
#include<stdio.h>
#include<stdlib.h>
#define n 3
int main(){
int i, j, temp, k;
int enter_num[n];
for (i = 0; i < n; i++){
scanf_s("%d", &enter_num[i]);
}
for (i = 0; i < n - 1; i++){ //选择排序的核心:
k = i; //每次将那个最大数值的序号放到k中,最后依次与enter_num[i]再进行交换即可。
for (j = i + 1; j < n; j++){
if (enter_num[k] < enter_num[j]){
k = j;
}
temp = enter_num[i];
enter_num[i] = enter_num[k];
enter_num[k] = temp;
}
}
printf("排序完后的数:\n"); //遍历输出数组。
for (i = 0; i < n; i++){
printf("%d\n", enter_num[i]);
}
system("pause");
return 0;
}
最后就是我们比较简单的,而且稳定性还挺好的,
插入排序:
#include<stdio.h>
#include<stdlib.h>
#define n 3
int main(){
int i, j, temp;
int enter_num[n];
for (i = 0; i < n; i++){
scanf_s("%d", &enter_num[i]);
}
for (i = 1; i < n; i++){ //插入排序:
for (j = i; j > 0 && enter_num[j] < enter_num[j - 1]; j--){
temp = enter_num[j]; //交换两个值的变量。
enter_num[j] = enter_num[j - 1];
enter_num[j - 1] = temp;
}
}
printf("排序完后的数:\n"); //遍历输出数组。
for (i = 0; i < n; i++){
printf("%d\n", enter_num[i]);
}
system("pause");
return 0;
}
插入排序:(思路)
例如,我们都打过扑克,打扑克牌就需要每摸一张牌,进行整牌。现在,假设我们现在手里有一张牌,然后,你要再摸一张牌,进行整牌,你会拿这这个牌和手里的牌比较,如果它比手里的牌小,则放到它的前面,如果比它大,则放到它的后面。随着手里的牌数量增多,你在进行整理的时候,你依然需要从后面向前面依次进行扫描,进行比较大小,等到找到了比前面的牌小的时候,这时,你只需要把它后面所有的牌向后错一位,再把它插进去即可完成插入排序。算法实现见上面代码。