基本思想:第i趟排序從序列的後n-i+1(i=1,2,···,n-1)個元素中選擇乙個最小的元素,與該n-i+1個元素的最前面那個元素進行位置交換,也就是與第i個位置上的元素進行交換,直到i=n-1。(直觀地講,每一趟的選擇排序就是從序列中未排好順序的元素中選擇乙個最小的元素,將該元素與這些未排好順序的元素的第乙個元素交換位置。)
有這樣乙個資料元素序列,其中6』表示該元素與本序列中其他元素有重複,在這裡加以區分。
第1趟排序,從後7個元素(即全部元素)中選擇乙個最小的元素,並將它與第乙個元素交換位置。全部序列中最小的元素是2,因此將2與第1個元素3交換位置,得到序列:
第2趟排序,從後6個元素中選擇乙個最小的元素,並將它與第2個元素交換位置,後6個元素中最小的元素是3,因此將3與第2個元素6交換位置,得到序列:
第3趟排序,從後5個元素中選擇乙個最小元素,並將它與第3個元素交換位置,後5個元素中最小的元素是4,因此本次選擇不需要交換元素位置,得到序列:
接下來的每一趟操作都是按照這樣"選擇-交換"方法進行的。不難看出,選擇排序的第i趟排序就是從序列的後n-i+1(i=1,2,···,n-1)個元素中選擇乙個最小的元素,並與第i個位置上的元素進行交換的過程。乙個包含n個元素的資料序列需要n-1趟的選擇排序。因為第n個元素不需要再選擇,它一定是最大的。
上述的元素序列的選擇過程如下:
初始狀態:
↓第1趟排序:
↓第2趟排序:
↓第3趟排序:
↓第4趟排序:
↓第5趟排序:
↓第6趟排序:
選擇排序的演算法描述如下:
void sort(keytype k,int n)
的選擇排序,要求從大到小,並輸出排序後的數列元素。
【分析】
該資料序列包含10個元素,因此可以將它放到乙個含有11個單元的陣列中,第0號元素作為存放每次待插入的元素k[i]的空間,在這裡不能直接照搬前面給出的演算法,要將前面實現從小到大排列的演算法加以修改,從而達到從大到小排列的目的。
#includevoid sort(int k,int n)//選擇排序 } }
}}main()
; //初始化序列,a[0]可任意置數
printf("原序列為:\n");//顯示原序列之中的元素
for(i=1;i<=10;i++)
printf("%d ",a[i]);
sort(a,10);//執行選擇排序
printf("\n排序後的序列為:\n");
for(i=1;i<=10;i++)
printf("%d ",a[i]); //輸出排序後結果
return 0;
}
排序 選擇排序 選擇排序 堆排序
寫在前面 上傳github交換排序選擇排序 堆排序 選擇排序 顧名思義,我們就可以猜到,它是原則合適的元素放到合適的位置 從圖中,我們可以得到 1.用第乙個元素,和其他所有的元素進行比較,找出最小的,然後進行交換 2.然後進行,資料的遞增 3.直到資料全部有序 void selectsort int...
排序 選擇排序(直接選擇排序 堆排序)
選擇排序 selection sort 的基本思想是 每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子檔案的最後,直到全部記錄排序完畢。常用的選擇排序方法有 直接選擇排序 和堆排序。直接選擇排序 straight selection sort 1 直接選擇排序的基本思想 n個記錄的檔...
排序2 選擇排序 選擇排序 堆排序
選擇排序,依次找到資料集n n 1 n 2 中比它大 小的最大 最小者,最終達到全部資料有序。1 選擇排序 直接的依次找到資料集合n n 1 n 2.的最大 最小者形成排序,非常好理解。選擇排序可能是和氣泡排序一樣,最直觀能想到的排序方法。顯然選擇排序和氣泡排序一樣,無所謂最好 最壞 平均,選擇排序...