简单的选择排序算法实现代码
Posted insertt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的选择排序算法实现代码相关的知识,希望对你有一定的参考价值。
1 #include<stdio.h> 2 #define N 12 3 //length统计数组的长度 返回最后元素的下标 4 int length(int a [N]){ 5 for(int i = 0;i<=N;i++){ 6 if(a[i]==0) return i-1; 7 8 } 9 } 10 //打印输出数组元素 11 void show(int a[N]){ 12 for(int i= 0;i<N;i++){ 13 if(a[i]!=0) printf("%4d",a[i]); 14 15 } 16 } 17 18 //简单选择排序 19 void selectsort (int a [N]){ 20 int min; 21 int dex ; //最小值下标 22 int temp ; 23 for(int k =0 ;k<=length(a)-1;k++) { //设置光标k 24 min = a [k] ; 25 for(int i = k;i<=length(a)-1;i++){ //找出最小值,放入数组光标最左边位置,向右移动光标; 26 27 /*!!有这段语句排序就不起作用,为什么? if(min<a[i+1]) { 28 dex = k; 29 }*/ 30 if(min>a[i+1]){ 31 min = a[i+1] ; 32 dex = i +1 ; 33 } 34 } 35 temp = a[k] ; 36 a[k]=min; 37 a[dex] = temp ; 38 } 39 } 40 41 int main(void){ 42 int a [N] ={2,3,7,1,22,3,5,34,467} ; //手动生成数组a 43 printf("%d ",length(a)); 44 selectsort(a); 45 show(a); //输出 1 2 3 3 5 7 34 34 467 结果正确 46 return 0 ; 47 }
先上代码。思路很简单对在光标k左边的元素不断进行比较,将最小的那个插入最左边。(这里说是插入,实际上是将最小元素与原最左元素进行互换,大多数排序算法里就没有真正用到过插入的,这么说只是习惯)
如果将选择排序的代码改成如下形式
void selectsort (int a [N]){ int min; int dex ; //最小值下标 int temp ; for(int k =0 ;k<=length(a)-1;k++) { //设置光标k min = a [k] ; for(int i = k;i<=length(a)-1;i++){ //找出最小值,放入数组光标最左边位置,向右移动光标; if(min<a[i+1]) { dex = k; } if(min>a[i+1]){ min = a[i+1] ; dex = i +1 ; } } temp = a[k] ; a[k]=min; a[dex] = temp ; } }
输出结果变为2 3 7 1 22 3 5 34 467 这是需要注意的地方
if(min<a[i+1]) {
dex = k;
} 这段代码是没有必要的,将代码加入程序之后反而会得不到正确的结果。 当min<a[i+1]时,就什么都不做就好了。
以上是关于简单的选择排序算法实现代码的主要内容,如果未能解决你的问题,请参考以下文章