数据结构-简单选择排序(C语言)
生活随笔
收集整理的這篇文章主要介紹了
数据结构-简单选择排序(C语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1.基本思想:
- 2.例子講解:
- 3.代碼實例C語言:
- 4.時間復雜度分析
1.基本思想:
第i趟排序開始時,當前有序區和無序區分別為R[0…i-1],R[i…n-1] (0<=i<n-1),該趟排序是從當前無序區中選出關鍵字最小的元素R[k],將它與無序區的第一個元素R[i]交換,使R[0…i]為新的有序區,R[i+1…n-1]為新的無序區
2.例子講解:
49, 38, 65, 97, 76, 13, 27
一開始的無序區就是上面的所有數49, 38, 65, 97, 76, 13, 27,有序區默認沒有
第一次從無序區中找到最小元素13和無序區第一個元素49交換位置,新的無序區為 38, 65, 97, 76, 49, 27新的有序區為:13
以此類推
圖片來自網絡
3.代碼實例C語言:
#include<stdio.h> #define LENGTH 6void simpleSort(int disorder[],int length) {int min_index = 0;int temp = 0;for(int i = 0;i<length;i++) {min_index = i;//令i為最小下標min_indexfor(int j = i+1;j<length;j++) {if(disorder[j]<disorder[i]) {//每次遍歷找到最小值的下標min_index = j;}}if(min_index!=i) {//如果發現了比min_index下標還小的元素,就交換i下標與min_index下標的值temp = disorder[i];disorder[i] = disorder[min_index];disorder[min_index] = temp;}} }void main() {int disorder[] = {49, 38, 65, 97, 76, 13, 27};//無序區simpleSort(disorder, LENGTH);for(int i = 0;i<LENGTH;i++) {printf("%d ",disorder[i]);}}換種數據結構書上的那種寫法:
#include<stdio.h> #define LENGTH 6typedef struct {int key; }RecType;void simpleSort(RecType disorder[],int length) {int min_index = 0;RecType temp;for(int i = 0;i<length;i++) {min_index = i;//令i為最小下標min_indexfor(int j = i+1;j<length;j++) {if(disorder[j].key<disorder[i].key) {//每次遍歷找到最小值的下標min_index = j;}}if(min_index!=i) {//如果發現了比min_index下標還小的元素,就交換i下標與min_index下標的值temp = disorder[i];disorder[i] = disorder[min_index];disorder[min_index] = temp;}} }void main() {RecType disorder[7] = {{49}, {38}, {65}, {97}, {76}, {13}, {27}};//無序區simpleSort(disorder, LENGTH);for(int i = 0;i<LENGTH;i++) {printf("%d ",disorder[i]);}}輸出結果如下
4.時間復雜度分析
1.平均時間復雜度:O(n2)
2.空間復雜度:O(n)
??在簡單選擇排序算法中simpleSort()函數中使用i、j、k和temp 這4個輔助變量,與問題規模n無關,被調用后資源釋放,而主函數中int disorder[] = {49, 38, 65, 97, 76, 13, 27}定義了一個數組,并分配空間,故空間復雜度為O(n)
推薦鏈接:https://cuijiahua.com/blog/2017/12/algorithm_5.html
總結
以上是生活随笔為你收集整理的数据结构-简单选择排序(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构-挖坑填数+分治法解决快速排序问
- 下一篇: element ui 下拉列表验证无效的