排序算法

排序算法

  • 說實在的,這些算法都是應付面試用的,真正的iOS開發過程中,蘋果都幫我們封裝好了相對應的方法,簡單省時省力,效率還高。當然了,研究算法可以提升自己的編程思想,以下案例都是從小到大排序
選擇排序
  • 取出第i個元素,依次和i后面的每一個元素對比,如果i+1元素比i元素小,那么交換元素值,然后接著拿交換后的元素值進行對比,直到對比到最后一個元素,其他元素以此類推
// 選擇排序
int nums[8] = {99, 123, 22, 6, 2, 55, 67, 100};
// 計算長度
int length = sizeof(nums) / sizeof(nums[0]);
for (int i = 0; i < length; i++) {
    for (int j = i + 1; j < length; j++) {
        if(nums[i] > nums[j]){
            // 交換元素值
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    }
}
冒泡排序
  • 冒泡排序,就是用相鄰的兩個元素比較,每完全比較一次,最值就會出現在末尾
  • 1和2,2和3,3和4.........以此類推
// 冒泡排序
int nums[8] = {99, 123, 22, 6, 2, 55, 67, 100};
int length = sizeof(nums) / sizeof(nums[0]);
for(int i = 0; i < length - 1; i++){
    for (int j = 0; j < length - 1 - i; j++) {
        if(nums[j] > nums[j + 1]){
            int temp = nums[j];
            nums[j] = nums[j + 1];
            nums[j + 1] = temp;
        }
    }
}
折半查找
  • 數組必須是有序的
  • 必須已知min和max(知道范圍)
  • 動態計算mid的值,取出mid對應的值進行比較
  • 如果mid對應的值大于需要查找的值,那么max = mid - 1
  • 如果mid對應的值小于需要查找的值,那么min = mid + 1
// 折半查找第一種方式
int findKey1(int nums[], int length, int key)
{
    int min, max, mid;
    min = 0;
    max = length - 1;
    mid = (min + max) / 2;

    while (key != nums[mid]) {
        if (key > nums[mid]) {
            // 判斷如果要找的值,大于了取出的值,那么min要改變
            min = mid + 1;
        }else if(key < nums[mid]){
            // 判斷如果要找的值,小雨了取出的值,那么max要改變
            max = mid - 1;
        }

        // 超出范圍,數組中沒有要查找的值
        if(min > max){
            return  -1;
        }
        mid = (max + min) / 2;
    }
    return mid;
}

// 折半查找第二種方式
int findKey2(int nums[], int length, int key)
{
    int min, max, mid;
    min = 0;
    max = length - 1;

    // 只要還在范圍內就需要查找
    while (min <= max) {
        // 計算中間值
        mid = (max + min) / 2;
        if(key > nums[mid]){
            min = mid + 1;
        }else if(key < nums[mid]){
            max = mid - 1;
        }else{
            return mid;
        }
    }
    return  -1;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    蟻前閱讀 5,222評論 0 52
  • 概述:排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,746評論 0 15
  • 總結一下常見的排序算法。 排序分內排序和外排序。內排序:指在排序期間數據對象全部存放在內存的排序。外排序:指在排序...
    jiangliang閱讀 1,377評論 0 1
  • //// PrefixHeader.pch// JNdefine//// Created by Titan ...
    不要打聽我的故事丶閱讀 858評論 4 6
  • 2017.06.21是我第三次考科目二。沒有緊張,只想趕緊考完,結束。 前一天我喊了冬雪哥哥回來,然后送我...
    最愛齊劉海兒閱讀 392評論 0 1