實驗8-1-4 使用函式的選擇法排序 (25分)
本題要求實現乙個用選擇法對整數陣列進行簡單排序的函式。
函式介面定義:
void sort( int a, int n );其中a是待排序的陣列,n是陣列a中元素的個數。該函式用選擇法將陣列a中的元素按公升序排列,結果仍然在陣列a中。
裁判測試程式樣例:
#include思路分析:按照陣列索引增加按照要求的大小順序依次選擇最小的數交換後儲存進陣列,對於陣列元素,是無序的選擇而是有序的排列。#define maxn 10
void sort( int a, int n );
int main() }}
}結果展示
排序過程描述
最初時:5 1 7 6
第一次:15 7 6
第二次:1 57 6
第三次:1 5 67
最終時:1 5 6 7
void
sort
(int a,
int n )
} i=0;
j--;}
}
結果展示
排序過程描述
最初時:5 1 7 6思路分析:第一次:1 5 67
第二次:1 56 7
第三次:15 6 7
最終時:1 5 6 7
冒泡法排序就可以想象成小魚吐泡泡一樣,將我們需要的最大的數通過相鄰陣列元素比較交換逐步「浮」出來,每次浮出最大數後比較剩餘的數(j–),從頭開始(i=0),依次「浮」出最大的數。
輸入幾組資料,對資料進行乙個乙個的收集,此排序需要大量的儲存空間
輸入:
5輸出:9 4 7 2 5
2 4 5 7 9如果有重複的也可進行選擇性輸出
**實現:
#include
int a[10]
,i;int
main()
for(i=
0;i<
10;i++)}
return0;
}
過程展示:
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
開始: 0 0 0 0 0 0 0 0 0 0
第乙個:0 0 0 0 0 0 0 0 0 1
第二個:0 0 0 0 1 0 0 0 0 1
第三個:0 0 0 0 1 0 0 1 0 1
第四個:0 0 1 0 1 0 0 1 0 1
第五個:0 0 0 0 1 1 0 0 0 1
再按從小到大遍歷輸出
#include
int a[
1001];
void
quicksort
(int left,
int right)
} a[left]
=a[i]
; a[i]
=temp;
quicksort
(left,i-1)
;quicksort
(i+1
,right)
;return;}
intmain()
quicksort(0
,n-1);
for(i=
0;i)printf
("%d"
,a[i]);
return0;
}
輸入:
10輸出:6 1 2 7 9 3 4 5 10 8
1 2 3 4 5 6 7 8 9 10陣列內的變化過程:
6 1 2 5 9 3 4 7 10 8選擇排序:o(n^2)6 1 2 5 4 3 9 7 10 8
3 1 2 5 4 6 9 7 10 8
分成6左右兩邊進行排序
2 1 3 5 4 6 9 7 8 10
1 2 3 5 4 6 8 7 9 10
1 2 3 4 5 6 7 8 9 10
氣泡排序:o(n^2)
桶排序:o(m+n)
快速排序:o( nlogn)
排序還有很多種方法有待學習,有其他方法的小夥伴也可以一起交流一下哦!
簡單的排序方法
原理 讓陣列當中相鄰的兩個數進行比較,陣列當中比較小的數值向下沉,數值比較大的向上浮!外層for迴圈控制迴圈次數,內層for迴圈控制相鄰的兩個元素進行比較。using system using system.collections.generic using system.componentmode...
簡單排序方法
1.冒泡法 void sort int array for int k 0 k 2.選擇法 void sort int array else if j 1 0 for int k 0 k2 有一數列1,1,2,3,5,求第30個數 public class mainclass public stat...
簡單排序方法 氣泡排序
氣泡排序 bubblesort 的基本思想是 將相鄰的記錄的關鍵碼進行比較,若前面記錄的關鍵碼大於後面記錄的關鍵碼,則將它們交換,否則不交換。設待排序的順序表sqlist中有n個記錄,氣泡排序要進行n 1趟,每趟迴圈均是從最後兩個記錄開始。第1趟迴圈到第2個記錄的關鍵碼與第1個記錄的關鍵碼比較後終止...