0x02. 選擇排序
0x03. 插入排序
0x04. 希爾排序
0x05. 快速排序
0x06. 歸併排序
0x07. 堆排序
void
bubblesort
(int arr,
int len)}}
}
void
bubblesort_pro
(int arr,
int len)}if
(issort)
}}
void
selectsort
(int arr,
int len)}}
}
void
insertionsort_pro
(int arr,
int len)
arr[j +1]
= value;}}
}
//希爾排序
void
shellsort
(int arr,
int len)
while
(gap >0)
arr[j + gap]
= tmp;
} gap = gap /3;
}/*直接對插入排序改寫
int i = 0;
int j = 0;
int flag = 0;
int gap = len;
while (gap > 1)
arr[j + gap] = flag;
}} }
*/}
//快速排序
intget_index
(int
* arr,
int left,
int right)
arr[left]
= arr[right]
;//如果右邊的數小於中軸,就移動到中軸左邊,之後移動left
while
(arr[left]
< pivot && left < right)
arr[right]
= arr[left]
;//如果左邊的數大於於中軸,就移動到中軸右邊
} arr[left]
= pivot;
return left;
}void
quicksort
(int
* arr,
int left,
int right)
}
void
merge
(int arr,
int left,
int mid,
int right)
for(i = left, j = mid +
1, k = i; i <= mid && j <= right; k++
)else
}//for
while
(i <= mid)
while
(j < right)
}void
mergesort
(int arr,
int low,
int high)
int mid = low +
(high - low)/2
;//從中間劃分兩個子串行
mergesort
(arr, low, mid)
;//對左側子串行進行遞迴排序
mergesort
(arr, mid +
1, high)
;//對右側子串行進行遞迴排序
merge
(arr, low, mid, high)
;//歸併
}
//堆排序
void
adjustdown
(int arr,
int k,
int len)
if(arr[0]
> arr[i]
)else
}//for
arr[k]
= arr[0]
;//被篩選的節點的值放入最終位置
}void
adjustup
(int arr,
int k)
//while
arr[k]
= arr[0]
;//複製到最終位置
}void
buildmaxheap
(int arr,
int len)
}void
heapsort
(int arr,
int len)
//for
}
期末複習 資料結構 排序(1)
1.排序 將一組 無序 的記錄序列調整為 有序 的記錄序列。2.內排序和外排序 概念 衡量效率的方法 排序方法 內部排序 插入排序 快速排序 選擇排序 歸併排序 基數排序等 外部排序 3.穩定排序和非穩定排序 穩定性概念 排序前兩個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。4...
資料結構之排序(期末複習)
知識框架 ps 文末有驚喜 排序是按關鍵字的非遞減或非遞增順序對一組記錄重新進行排列的操作。分類 1 內部排序 待排序記錄全部存放在計算機記憶體中進行排序的過程 2 外部排序 待排序記錄的數量很大,記憶體一次不能容納全部記錄,在排序過程中尚需對外存進行訪問的排序過程 1 插入類 直接插入排序 折半插...
資料結構期末複習
1 基於鄰接表 2struct vertexnode3 7struct edgenode8 12struct vertexnode adjlist 100 13 int visited 100 14 void gs int a,int n,int e 15 22for k 0 k e k 2330 ...