我們知道,排序方法很多:氣泡排序,選擇排序,快速排序,希爾排序。今天,我將就我的了解來作出介紹:
氣泡排序:
氣泡排序是一種較為簡單的排序方法,它主要思路是遍歷所有的資料,一次比較兩個數,如果它們的順序是我們所要求的,就不變化;如果它們的大小順序和我們的要求相左,則進行交換。重複遍歷,直到沒有資料需要交換,也就是所有的資料都按照我們的期待的順序排列,即氣泡排序成功。
下面舉乙個簡單的例子,假設陣列中的五個數,要求從小到大排列,arr[5]=;
第一次遍歷:
arr[0]和arr[1]進行比較,arr[0]>arr[1],進行交換,交換後的陣列變成 7,9,5,3,1;
arr[1]和arr[2]進行比較,arr[1]>arr[2],進行交換,交換後的陣列變成7,5,9,3,1;
arr[2]和arr[3]進行比較,arr[2]>arr[s],進行交換,交換後的陣列變成7,5,3,9,1;
arr[3]和arr[4]進行比較,arr[3]>arr[4],進行交換,交換後的陣列變成7,5,3,1,9;
我們可以看到,第一次遍歷,最大的數字9已經被交換到了最後乙個數字,這正是符合我們的預期的。
我們可以想象,第二次遍歷後,7被交換到arr[3]的位置,陣列變成5,3,1,7,9;
第三次遍歷後,5被交換到arr[3]的位置,陣列變成3,1,5,7,9;
第四次遍歷後,3被交換到arr[2]的位置,陣列變成1,3,5,7,9;
至此,氣泡排序完成,資料排列成功。
接下來附上**
void bubble_sort(int arr)
} }}int main()
; bubble_sort(arr);
for (int i = 0; i < 10; i++)
printf("\n");
system("pause");
return 0;
}
選擇排序:
選擇排序較之氣泡排序來說,遍歷次數要少一些。它的主要思路是每一次遍歷選出陣列裡最小的乙個數,放在待排序陣列裡的起始位置,直到所有的待排序的資料排完,即選擇排序成功。
陣列arr[5]=;在這個陣列中,第一此遍歷:
1 5 3 9 7找到最小的數1,由於1在待排序陣列的起始位置,所以第一次遍歷不需要作出交換。
第二次遍歷:
1 5 3 9 7 找到待排序中最小的數字3,把它與第二個數進行交換,陣列變成1,3,5,9,7;
第三次遍歷:
1 3 5 9 7,找到數字5,它正好在第三個數字,所以不需要進行交換,陣列依然為1,3,5,9,7
第四此遍歷:
1 3 5 9 7,找到數字7,把它與第四個數字進行交換,陣列變成1,3,5,7,9
至此,選擇排序成功。
附上**:
void select_sort(int* arr, int num) }}
int main()
; int num = sizeof(arr) / sizeof(arr[0]);
select_sort(arr, num);
for (int i = 0; i < num; i++)
printf("%d ",arr[i]);
printf("\n");
system("pause");
return 0;
}
二分查詢
假設陣列arr,待查詢的資料為key,定義兩個變數 left和right,arr[left]和arr[right]分別代表陣列第乙個元素和最後乙個元素。
從陣列的中間元素arr[mid]開始,如果key==arr[mid],就說明 找到了待查詢的那個數;
如果key
如果key>arr[mid],同理,下一次查詢的範圍變為arr[mid]~arr[right];
優點:比較次數少,占用系統記憶體少。
缺點:要求待查表為有序表,且插入刪除比較困難。不適用於經常變動,頻繁查詢的有序數列。
下面附上**:
bool bin_search(int arr, int data)
} else
return 0;
}int main()
; int data = 9;
bin_search(arr, data);
printf("yes\n");
system("pause");
return 0;
}
以上**執行環境皆為vs 2013. 氣泡排序,快速排序,選擇排序,二分查詢
氣泡排序原理 每一趟只能將乙個數歸位,如果有n個數進行排序,只需將n 1個數歸位,也就是說要進行n 1趟操作 已經歸位的數不用再比較 每一次都是得到比較列表中最大的數。氣泡排序演算法及其優化 氣泡排序的基本特徵是只能交換相鄰的元素。從下邊界開始,一趟掃瞄下來,可以把當前最大值頂到上邊界 如果沒有發生...
氣泡排序 選擇排序 簡單二分查詢
1 氣泡排序 關於氣泡排序,其實就是相鄰兩兩對比,正序反序,大的 小的 往後挪乙個位置,第一遍最大 最小 肯定會在最後了,然後第二次排序不計最後乙個元素進行重排,然後以此類推 public static void main string args for int i 0 iscore j 1 for...
氣泡排序 選擇排序 簡單二分查詢
1 氣泡排序 關於氣泡排序,其實就是相鄰兩兩對比,正序反序,大的 小的 往後挪乙個位置,第一遍最大 最小 肯定會在最後了,然後第二次排序不計最後乙個元素進行重排,然後以此類推 public static void main string args for int i 0 iscore j 1 for...