前言
在最初的刚接触排序的时候,起初我确实只是简单的能写出过程,但是却没有详细的去了解选择与冒泡排序之间的区别。后来用代码测试验证后,才明白两者的区别。
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
通俗的讲就是,每一次循环,都是拿当前索引去挨个比,找出最值,放大此索引中。如果有2个数,需要循环1次,如果有N个数,需要循环N-1次。代码如下:
int nums[10]={100,34,288,1,199,199,288,0,10,3};
int lenth = sizeof(nums) / sizeof(nums[0]);
for (int i = 0; i < lenth-1; i++) {
for (int j = i+1; j < lenth; j++) {
if (nums[i]<nums[j]) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
printf("第%i比较后 \n",i+1);
for (int m = 0; m<lenth; m++) {
printf("%i ",nums[m]);
}
printf("\n\n");
}
printf("排序结果为:\n");
for (int i = 0; i<lenth; i++) {
printf("%i ",nums[i]);
}
printf("\n\n");
}
以上就是选择排序,结果可自行打印就可清晰看到整个过程了。
冒泡排序
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。代码如下:
int nums[4]={100,34,288,1};
int lenth = sizeof(nums) / sizeof(nums[0]);
for (int i=0; i < lenth-1; i++) {
for (int j = 0; j < lenth - 1 - i; j++) {
// printf("%i----%i\n",j,j+1);
if (nums[j] > nums[j+1]) {
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
printf("第%i次排序后:",i+1);
for (int i = 0; i<lenth; i++) {
printf("%i ",nums[i]);
}
printf("\n");
}
printf("最终的排序结果\n\n");
for (int i = 0; i<lenth; i++) {
printf("%i ",nums[i]);
}
以上就是冒泡排序,过程也可自行进行打印。
当然排序的算法还有很多种,后续再继续测试说明快速排序。