void SelSort(int A[], int n) //選擇排序法之副程式
{
int i, j, Temp, Min = 0;
for (i = 1; i <= n - 1; i++)
{
Min = i;
for (j = i + 1; j <= n; j++)
if (A[j] < A[Min])
Min = j;
{//相鄰兩個的資料交換位置
Temp = A[i];
A[i] = A[Min];
A[Min] = Temp;
}
}
}
插入排序法(Insertion Sort)
依序由未排序的資料中選一筆資料
一一掃瞄已排序資料,將選取的資料插入正確位置
void InSort(int A[], int n)
{
int i, j, Temp;
for (i = 1; i <= n; i++)
{
Temp=A[i];
j=i-1;
while (Temp<A[j])
{
A[j+1]=A[j];
j--;
if(j==-1)
break;
}
A[j+1]=Temp;
}
}
選擇排序法(Selection Sort)
void SelSort(int A[], int n) //選擇排序法之副程式
{
int i, j, Temp, Min = 0;
for (i = 1; i <= n - 1; i++)
{
Min = i;
for (j = i + 1; j <= n; j++)
if (A[j] < A[Min])
Min = j;
{//相鄰兩個的資料交換位置
Temp = A[i];
A[i] = A[Min];
A[Min] = Temp;
}
}
}
資料搜尋
線性搜尋法 - Sequential Search
1.無崗哨(衛兵)線性搜尋(Non-Sentinel Linear Search)
直接對數列由右至左,或由左至右一一比對是否有與鍵值相同的元素
需比對陣列值是否與鍵值相同、陣列是否結束
2.崗哨(衛兵)線性搜尋(Sentinel Linear Search)
直接對數列由右至左,或由左至右一一比對
將鍵值放在陣列的第一個或最後一個元素,並把這個元素當成崗哨(衛兵)
一定可以找到與鍵值相同的元素 ⇒ 避免檢查陣列是否結束
因為省下一次比較的時間,當資料很大時,時間約為無崗哨線性搜尋的一半(時間複雜度仍為Ο(n))
特性:
資料不需事先排序
支援隨機存取(Random Access)與循序存取(Sequential Access)機制
時間複雜度為Ο(n) ⇒ 線性
時間複雜度(Time Complexity)
(1+2+3+...+n)/n = (n+1)/2 ⇒ Ο(n)
#include<stdio.h>
#include<stdlib.h>
void main (){
int search_Ctr[] = {6,1,7,2,8,3,8,4,9,5,10};//初始內容
int Ctr_Max = sizeof(search_Ctr)/sizeof(search_Ctr[0]); //陣列的長度
int key = 0;int index = 0; // key =需要搜尋的值
scanf("%d",&key);
while (index < Ctr_Max)
{
if(search_Ctr[index] == key){ printf("key is %d ",index); break;}
index++;
if(index>= Ctr_Max) {printf("Not key");}
}
}