选择排序
来源:互联网 发布:淘宝的运营模式是什么 编辑:程序博客网 时间:2024/06/06 09:53
- 此方法移动元素的次数比较少,但是不管序列中元素初始排列状态如何,第 i 趟排序都需要进行 n - i 次元素之间的比较,因此总的比较次数为(n - 1) + (n-2)+.....2+1=n(n-1)/2, 时间复杂度是 O(n^2)
#include <stdlib.h>
#include <stdio.h>
void selectSort(int array[], int n)
{
int i, j, d;
int temp;
for(i = 0; i < n - 1; ++i)
{
d = i; //开始一趟选择排序,假定第i个元素是后面n - i + 1个未排序的元素中最小的元素
for(j = i + 1; j < n; ++j)
if(array[j] < array[d]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标d
d = j;
if(d != i) //如果最小元素的下标不是后面n - i + 1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置
{
temp = array[d];
array[d] = array[i];
array[i] = temp;
}
}
}
int main()
{
int array[] = {3, 1, 15, 11, 89, 5};
int size = sizeof(array)/sizeof(int);
selectSort(array, size);
for(int i = 0; i < size; ++i)
{
printf("%d ", array[i]);
}
printf("\n");
}
#include <stdio.h>
void selectSort(int array[], int n)
{
int i, j, d;
int temp;
for(i = 0; i < n - 1; ++i)
{
d = i; //开始一趟选择排序,假定第i个元素是后面n - i + 1个未排序的元素中最小的元素
for(j = i + 1; j < n; ++j)
if(array[j] < array[d]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标d
d = j;
if(d != i) //如果最小元素的下标不是后面n - i + 1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置
{
temp = array[d];
array[d] = array[i];
array[i] = temp;
}
}
}
int main()
{
int array[] = {3, 1, 15, 11, 89, 5};
int size = sizeof(array)/sizeof(int);
selectSort(array, size);
for(int i = 0; i < size; ++i)
{
printf("%d ", array[i]);
}
printf("\n");
}
0 0
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序:
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 网页WB.ExecWB控件打印方法
- 网站架构优化与设计模式
- linux SPI结构体
- extern "c"用法解析
- Log4Cplus在Linux下的安装及使用
- 选择排序
- 【计算机视觉】一步一步实现人脸或特定物体的跟踪(1)——利用CamShift来跟踪
- 文件读写遇到InputStream.available()一直返回0
- android 媒体库数据更新解决办法总结
- 122323
- 【伯乐在线】程序员常有,优秀程序员不常有
- eclipse C/C++开发环境的配置
- Mac-O文件加载的全过程(一)
- javaweb使用smartupload下载文件,和在线打开文件