由於最近需要面試,筆試的時候遇到了不同的演算法,上網搜了一些
這裡把常考到的常用排序演算法簡單彙總了下。
包括氣泡排序,簡單選擇排序,直接插入排序,希爾排序,堆排序和快速排序。
[objc]view plain
copy
//常用排序彙總
#include
void
swap(
intint
*a,
intint
*b);
void
bubble_sort(
inta,
intn);
void
select_sort(
inta,
intn);
void
insert_sort(
inta,
intn);
void
shell_sort(
inta,
intn);
void
heap_adjust(
inta,
inti,
intn);
void
heap_sort(
inta,
intn);
void
quick_sort(
inta,
intlow,
inthigh);
intmain()
; // bubble_sort(arr, 10);
// select_sort(arr, 10);
// insert_sort(arr, 10);
// shell_sort(arr, 10);
// heap_sort(arr, 10);
quick_sort(arr, 0, 9
);
for(
inti =
0; i < 10
; i++)
return
0;
} //交換資料
void
swap(
intint
*a,
intint
*b)
//氣泡排序法
//時間複雜度o(n^2) 空間複雜度o(1)
void
bubble_sort(
inta,
intn)
} } }
//簡單選擇排序
//時間複雜度o(n^2) 空間複雜度o(1)
void
select_sort(
inta,
intn)
} if(min != i)
} } //直接插入排序
//時間複雜度o(n^2) 空間複雜度o(1)
void
insert_sort(
inta,
intn)
a[j+1
] = temp;
} }
//希爾排序
//時間複雜度為o(nlogn) 空間複雜度為o(1)
void
shell_sort(
inta,
intn)
a[j+gap] = temp;
} gap = (gap-1)/3
; }
} //堆排序
//時間複雜度為o(nlogn) 空間複雜度為o(1)
void
heap_sort(
inta,
intn)
for(int
i = n-
1; i >
0; i--)
} //構建大頂堆
void
heap_adjust(
inta,
inti,
intn)
} //快速排序
//時間複雜度為o(nlogn) 空間複雜度為o(logn) ~ o(n)
void
quick_sort(
inta,
intlow,
inthigh)
swap(&a[low], &a[j]);
if(i-
1>low) quick_sort(a, low, i-
1);
if(j+11
, high);
}
一些簡單的面試演算法題?
header content type text html charset utf 8 for a 0 a 100 a 二位陣列排序 arr array array id 1,name lisi age 20 array id 2,name lisi age 50 array id 3,name l...
面試演算法題總結 一
華為面試題 寫乙個程式,要求功能 求出用1 2 5 這三個數不同個數組合的和為100 的組合個數。如 100 個1 是乙個組合,5 個1 加19 個5 是乙個組合。請用c 語言寫。答案 最容易想到的演算法是 設x 是1 的個數,y 是2 的個數,z 是5 的個數,number 是組合數 注意到0 x...
面試演算法題總結 一
思想,每次隨機取乙個數,將大於其的放在右邊,小於或等於其的放在左邊,如此遞迴 def quicksort arr if len arr 1or len list filter lambda a a arr 0 arr len arr return arr middle random.choice r...