從右向左氣泡排序
阿新 • • 發佈:2018-11-13
前面寫的氣泡排序是從左邊向右找較大值,先找到最大值,然後依次找到次最大值,從右往左排序。這篇文章再次從右邊往左找最小值,先將最小值找到,再找次較小值,從左往右排序。
我們先定義三個值int size=sizeof(arr)/sizeof(arr[0]);//陣列的大小
int cur;//current 當前值
int bound;//邊界(0,size-1]就可以表示整個陣列下標的區間,(0,bound]表示已排序的區間,[bound,size)表示待排序區間
定義一個排序的函式,程式碼如下所示
void asc_sorted(int* arr,int size) { int bound; int cur;//cur:current,bound :邊界 for (bound = 0; bound<size; ++bound) { for (cur = size - 1; cur>bound;--cur) { //找較小值 if (arr[cur - 1] > arr[cur]) { int temp = arr[cur]; arr[cur] = arr[cur - 1]; arr[cur - 1] = temp; } } } }
// 陣列作為函式的引數時會隱式轉換成指標,指向陣列的首元素,所以在定義時要借用指標。
// 在函式外部將陣列長度求好然後當做引數傳到函式裡面。
完整程式如下所示示。程式碼中只要求對5 個數進行排序,如果需要更多,修改陣列大小就行。
#include <stdio.h> #include <stdlib.h> void asc_sorted(int* arr,int size)//ascending升序,desending降序 { int bound; int cur;//cur:current,bound :邊界 for (bound = 0; bound<size; ++bound) { for (cur = size - 1; cur>bound;--cur) { //找較小值 if (arr[cur - 1] > arr[cur]) { int temp = arr[cur]; arr[cur] = arr[cur - 1]; arr[cur - 1] = temp; } } } } int main() { // 陣列作為函式的引數時會隱式轉換成指標,指向陣列的首元素 // 在函式外部將陣列長度求好然後當做引數傳到函式裡面 int arr[5]; int size = sizeof(arr) / sizeof(arr[0]); printf("please enter the array:\n"); for (int i = 0; i < 5; i++) scanf_s("%d", &arr[i]); asc_sorted(&arr,size); for (int i = 0; i < 5; i++) printf ("%d\t", arr[i]); system("pause"); return 0; }