1. 程式人生 > >排序演算法c語言描述---選擇排序

排序演算法c語言描述---選擇排序

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!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;}


二。 《大話資料結構》一書截圖分析

注:本文僅為分享知識,絕無商業用途。

如果以該種形式分享知識造成不必要的糾紛,還請第一時間告知。

 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述