前言
在最初的剛接觸排序的時候,起初我確實只是簡單的能寫出過程,但是卻沒有詳細的去了解選擇與冒泡排序之間的區別。后來用代碼測試驗證后,才明白兩者的區別。
選擇排序
選擇排序(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]);
}
以上就是冒泡排序,過程也可自行進行打印。
控制臺輸出
當然排序的算法還有很多種,后續再繼續測試說明快速排序。