C语言数据结构希尔排序

Python030

C语言数据结构希尔排序,第1张

void main()

{

datatype R[MAXNUM]

int d[6]=[50,25,12,6,3,2,1]

for(int i=0i<MAXNUMi++)

scanf("%d",&R[i].key)

ShellSort(R,MAXNUM,d,6)

for(int i=0i<MAXNUMi++)

printf("%d",R[i].key)

}

当待排序的序列已经有序(不管是升序还是降序),此时快速排序最慢,一般当数据量很大的时候,用快速排序比较好,为了避免原来的序列有序,一般采用改进的快速排序算法,在排序之前随机交换两个元素的位置,就可以达到目的了,有一本书,叫《算法设计、分析与实现:C、C++和java》徐子珊著。可以看看,里面写了很多基本的算法

因为你的排序函数有问题,导致代码一直在排序函数中死循环,不能执行后边的输出。我改了下。

#include<stdio.h>

#include<stdlib.h> 

#define MaxLen 100

typedef struct{

int num

float score

}stu

typedef stu DataType

typedef struct{

DataType data[MaxLen+1]

int length

}SeqList

void CreatList(SeqList *L) {

int i, k, n

printf("请输入学生人数(小于等于%d):\n", MaxLen)

scanf("%d", &n)

i = 0//三次机会的话i从0开始,或者判断条件改为i<=3

while (n > MaxLen) {

if (i < 3)/*给三次输入机会*/ {

printf("储存空间不足,请重新输入学生人数:\n")

scanf("%d", &n)

i++

}

else {

printf("输入数据不正确,程序将退出!")

exit(1)

}

}

printf("请输入学生学号(int)和成绩(float):\n")

for (i = 0 i < n i++) {//使用数组时循环变量从0开始,或者数组下标从i-1开始,否则会导致L->data[0]空数据。

scanf("%d%f", &L->data[i].num, &L->data[i].score)

L->length = n

}

return

}

/*void SelectSort(SeqList *L) {

int i, j, k

for (i = 1 i<L->length i++) {

k = i

for (j = i + 1 j <= L->length i++)

if (L->data[j].score>L->data[k].score)

k = j

if (i != k) {

L->data[0] = L->data[k]

L->data[k] = L->data[i]

L->data[i] = L->data[0]

}

}

}*/

void SelectSort(SeqList *L) {

int i, j

DataType temp

for (i = 0 i < L->length-1 i++) {

for (j = 0 j < L->length - 1-i j++) {

if (L->data[j].score<L->data[j+1].score) {

temp= L->data[j] 

L->data[j] = L->data[j+1]

L->data[j+1] = temp

}

}

}

return

}

void PrintList(SeqList *L){

int i

printf("学生学号和成绩分别为\n")

for (i = 0 i < L->length i++) {//从0开始录入,所以从0开始输出

printf("%d %5.2f\n", L->data[i].num, L->data[i].score)

}

return

}

int main(){

int i

SeqList *L

L=(SeqList*)malloc(sizeof(SeqList))

CreatList(L)

SelectSort(L)

PrintList(L)

system("pause")

return 0

}