选择排序代码
public class PaiXu {
/**
* @param args
*/
/**
* 冒泡降序
*
* @param a
* @return
*/
public static int[] maoPao(int a[]) {
int c = 0;
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] < a[j + 1]) {
c = a[j];
a[j] = a[j + 1];
a[j + 1] = c;
}
}
}
return a;
}
/**
* 冒泡升序
* @param a
* @return
*/
public static int[] maoPaoShenXu(int a[]){
int c = 0;
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] >a[j + 1]) {
c = a[j];
a[j] = a[j + 1];
a[j + 1] = c;
}
}
}
return a;
}
/**
* 选择降序
*/
public static int[] xuanZe(int a[]) {
for (int i = 0; i < a.length - 1; i++) {
int min = i;
for (int j = i + 1; j < a.length; j++) {
if (a[min] < a[j]) {
min = j;
}
}
if (min != i) {
int tem = a[min];
a[min] = a[i];
a[i] = tem;
}
}
return a;
}
/**
* 插入排序 降序
*
* @param a
* @return
*/
public static int[] chaRu(int a[]) {
for (int i = 1; i < a.length; i++) {
if (a[i] > a[i - 1]) {
int tem = a[i];
int j = i;
for (; j > 0; j--) {
if (tem > a[j - 1]) {
a[j] = a[j - 1];
} else {
break;
}
}
a[j] = tem;
}
}
return a;
}
/**
* 显示数组的数目
*
* @param a
*/
public static void show(int a[]) {
for (int b : a) {
System.out.println(b);
}
}
/**
* 二分查找数组 只能查找降序数组
*/
public static void erFenChaZhao(int num, int a[]) {
int head = 0;
int trail = a.length - 1;
int middle = 0;
boolean flag = true;
while (trail >= head) {
middle = (trail + head) / 2;
if (num == a[middle]) {
System.out.println("找到了,位置是第" + (middle + 1) + "个");
flag = false;
break;
} else if (num < a[middle]) {
head = middle + 1;
} else {
trail = middle - 1;
}
}
if (flag) {
System.out.println("没有这个数");
}
}
/**
* 顺序查找
*/
public static void shunXuChaoZhao(int num, int a[]) {
for (int i = 0; i < a.length; i++) {
if (num == a[i]) {
System.out.println("找到了,它是当前数组的第" + (i + 1) + "个");
}
}
}
}
//以前写的一个工具类
❷ c语言选择排序,程序
不说原理了,直接上代码:
typedefintDT;
staticvoidswap(DT*a,DT*b){
if(a!=b){
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}
}
voidselect(DTfrom[],intlen,int(*cmp)(DT,DT)){
inti,j;
for(i=0;i<len;++i){
DTt=from[0];
intk=0;
for(j=1;j<len-i;++j){
if(cmp(t,from[j])==-1){
t=from[j];
k=j;
}
}
swap(from+len-1-i,from+k);
}
}
❸ C语言选择排序法
这是选择排序。先用a[0]与a[1]比较,当a[0]<a[1]时并不交换,而用k记下来现在a[0]最小……这样一趟比较完后a[k]就是整个数组中最小的元素,把它与a[0]交换;第二趟,从a[1]开始重复前面的操作,那么最后a[1]就是剩下的n-1个元素中最小的……看a[0]、a[1]已经由小到大排好了,当做完n-1趟时不就把整个数组都排好了吗?注意:t=array[k];array[k]=array[i];array[i]=t;不是for(j=i+1;j<n;j++)的循环体,要等它循环完了后才执行一次。
❹ 什么是c语言里面的选择排序算法
选择法排序是一种简单的容易实现的对数据排序的算法。
以整形数组元素为例,有数组A[10],即A[0],A[1],…,A[8],A[9](假设其元素均互不相同)。要求对其元素排序使之递增有序。
首先以一个元素为基准,从一个方向开始扫描,比如从左至右扫描,以A[0]为基准。 接下来从A[0],…,A[9]中找出最小的元素,将其与A[0]交换。 然后将基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。 一直进行到基准位置移到数组最后一个元素时排序结束(此时基准左边所有元素均递增有序,而基准为最后一个元素,故完成排序
写成独立函数如下:
void selectionsort(int *array,int n) //array为存储数据的数组,n为数组元素个数
{
int k,temp; //k用来存储,临时最小数据的位置
for(int i=0;i<n-1;i++)
{
k=i;
for(int j=i+1;j<n;j++) //从第i个数开始选择最小数位置,存于k中
if(array[j]<array[k])
k=j;
if(k!=i) //若最小数,不为array[i],则array[i]与array[k]进行交换
{
temp=array[i];
array[i]=array[k];
array[k]=temp;
}
}
}
算法平均时间复杂度: O(n^2)
❺ C# 选择排序 代码
你的选择排序的程序,我帮你改完了,你看看吧(改动的地方见注释)
usingSystem;
namespaceSortApplication{
classSortProgram{
staticvoidMain(string[]args){
intN=10,min,temp;//这里定义临时变量和最小元素下标变量
int[]a=newint[N];varr=newRandom();
Console.Write("原有数列顺序:");
for(inti=0;i<N;i++)
{
a[i]=r.Next(0,30);
Console.Write(a[i]+"");
}
Console.WriteLine("");
Console.Write("选择排序后数列顺序:");
for(inti=0;i<N-1;i++)//每次循环数组,找出最小的元素,放在前面,前面的即为排序好的
{
min=i;//假设最小元素的下标
for(intj=i+1;j<N;j++)//将上面假设的最小元素与数组比较,交换出最小的元素的下标
if(a[j]<a[min])
min=j;
//若数组中真的有比假设的元素还小,就交换
if(i!=min)
{
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
Console.Write(a[i]+"");
}
Console.ReadKey();
}
}
}
❻ 选择排序法代码问题
这是因为score没有分配内存空间,导致在输入的时候,就会出现内存空指针问题。
解决方法:
int *score 改成int score[10],10是数组的大小,必须大于要输入数据的个数。
另外把
scanf("%d",score[i]);
改成
scanf("%d",&score[i]);
❼ 写出选择排序的程序
#include<stdio.h>
int main()
{
void sort(int array[],int n);
int a[10],i;
printf("enter 10 number: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array: ");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf(" ");
return 0;
}
void sort(int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
❽ c语言选择排序的程序代码
是数字排序么?
数字排序:
# include<stdio.h>
# include<stdlib.h>
int mycomp(const void *p1,const void *p2){
const int *a1=(const int*)p1;
const int *a2=(const int*)p2;
if(*a1<*a2)
return -1;
if(*a1==*a2)
return 0;
else
return 1;
}
main(){
int a[20]={5,7,9,6,5,8,4,5,2,3,1,8,6,9,7,0,5,4,5,6};
qsort(a,20,sizeof(int),mycomp);
for(int i=0;i<20;i++)
printf("%d",a[i]);
}
❾ C语言选择法排序
#include<stdio.h>
#defineM 5
void main()
{
int b[M],i,j,t,k;
for(i=0;i<M;i++)
scanf("%d",&b[i]);
for(i=0;i<M-1;i++)
{
for(k=i,j=i+1;j<M;j++)
if(b[k]<b[j])
k=j;
if(i!=k)
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
}
for(i=0;i<M;i++)
printf("%d ",b[i]);
}
错在大括号位置加错了。
代码:
#include<stdio.h>
void SelectionSort(int *num,int n)
{
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i < n-1;i++)
{
min = i;//每次讲min置成无序组起始位置元素下标
for(j = i;j < n;j++)//遍历无序组,找到最小元素。
{
if(num[min]>num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是无序组起始位置元素,则与起始元素交换位置
{
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
}
}
}
(此处空一行)
int main()
{
int num[6] = {5,4,3,2,9,1};
int i = 0;
SelectionSort(num,6);//这里需要将数列元素个数传入。有心者可用sizeof在函数内求得元素个数。
for(i = 0;i < 6;i++)
{
printf("%d ",num[i]);
}
return 0;
}
❿ 求 c语言选择排序法和 冒泡排序法代码
冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`arr[n],arr[n+1]`),如果前面的数大于后面的数(`arr[n] > arr[n+1]`),那么交换两个元素的位置,把大的数往后移动。这样依次经过一轮比较以后,最大的数将会被交换到最后的位置(arr[n-1])。
C语言实现Bubblesort:
voidbubblesort(inta[],intm)
{
inti,j;
inttmp;
intflag=0;//设定标志,如果第一次循环比较时没有发生交换,则说明数组是升序排序,不用排序,提前结束循环。
for(i=0;i<m;i++)//外层循环控制循环次数
{
for(j=0;j<m-1-i;j++)//内层循环控制每次循环里比较的次数。
{
if(a[j]>a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
flag=1;
}
}
if(0==flag)
{
printf("NoSort ");
break;
}
}
}
选择排序法的过程是,通**过比较,选择出每一轮中最值元素,然后把他和这一轮中最最前面的元素交换**,所以这个算法关键是要记录每次比较的结果,即每次比较后最值位置(下标)。
C语言实现(Selectionsort)
voidselectionsort(inta[],intm)
{
inti,j;
intk;
inttmp;
for(i=0;i<m-1;i++)//控制循环次数,n个数需要n-1次循环
{
k=i;
for(j=i+1;j<m;j++)
{
if(a[j]<a[k])
k=j;
}
//i不等于k是就证明a[i]不是最小的,
//i等于k时证明a[i]就是本轮比较过程中最小的值
if(i!=k)
{
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
}