排序演算法c語言描述---選擇排序
阿新 • • 發佈:2018-11-12
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
排序算法系列學習,主要描述氣泡排序,選擇排序,直接插入排序,希爾排序,堆排序,歸併排序,快速排序等排序進行分析。
文章規劃:
一。通過自己對排序演算法本身的理解,對每個方法寫個小測試程式。 具體思路分析不展開描述。
二。通過《大話資料結構》一書的截圖,詳細分析該演算法 。
在此,推薦下程傑老師的《大話資料結構》一書,當然不是打廣告,只是以一名讀者的身份來客觀的看待這本書,確實是通俗易懂,值得一看。
②選擇排序
一。個人理解
選擇排序思路:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列的起始位置。以此類推,直到所有元素均排序完畢。
具體做法是:
選擇最小的元素與未排序部分的首部交換,使得序列的前面為有序。
通俗的說,就是每次迴圈找到未排序序列中的最小元素放到起始位置。直至迴圈n-1次遍歷全部的。
選擇排序也比較簡單易懂,下面直接上程式碼。
#include<stdio.h>// 列印結果void Show(int arr[] , int n){ int i; for ( i=0; i<n; i++ ) printf("%d ", arr[i]); printf ("\n");}// 交換陣列元素位置void Swap( int *num_a, int *num_b ){ int temp = *num_b; *num_b = *num_a; *num_a = temp;}// 選擇排序void SelectSort( int *arr, int n ){ int i, j, min_; //min_ 為最小值下標 for ( i=0; i<n-1; i++ ) //控制n-1趟的選擇步驟 { min_ = i; //將當前下標定義為最小值下標 for ( j=i+1; j<n; j++ ) //在arr[i],arr[i+1],...,arr[n-1]中選鍵值最小的結點 { if ( arr[min_] > arr[j] ) min_ = j; //如果有小於當前最小值的,把下標賦值給min_ } if ( i != min_ ) Swap( &arr[i], &arr[min_]); //如果min_不等於初始值,說明找到最小值,交換。 }}int main(){ //測試資料 int arr_test[10] = { 8, 4, 2, 3, 5, 1, 6, 9, 0, 7 }; //排序前陣列序列 Show( arr_test, 10 ); SelectSort( arr_test, 10 ); //排序後陣列序列 Show( arr_test, 10 ); return 0;}
二。 《大話資料結構》一書截圖分析
注:本文僅為分享知識,絕無商業用途。
如果以該種形式分享知識造成不必要的糾紛,還請第一時間告知。